Cassandra:高可用与分布式NoSQL数据库

3星 · 超过75%的资源 需积分: 10 7 下载量 162 浏览量 更新于2024-08-01 收藏 400KB PDF 举报
"Cassandra是一个分布式NoSQL数据库系统,由Avinash Lakshman和Prashant Malik设计,最初在Facebook内部开发,后成为Apache软件基金会的顶级项目。它旨在处理大量数据并提供高可用性、可扩展性和低延迟的数据存储解决方案。 为什么选择Cassandra? Cassandra的设计初衷是为了解决大数据量的问题,比如存储大量的用户消息副本、消息的反向索引和个人用户数据。系统需要处理大量的随机读写请求,而且当时市场上没有满足这些需求的成熟解决方案。因此,Cassandra应运而生。 设计目标: 1. 高可用性:Cassandra通过数据复制和分布式架构确保了服务的持续可用,即使部分节点故障也能正常工作。 2. 最终一致性:牺牲强一致性来换取高可用性,允许在网络中不同节点间存在短暂的数据不一致,但最终会达到一致状态。 3. 增量可扩展性:随着数据增长,可以通过添加更多节点轻松扩展集群,无需停机或大规模重构。 4. 乐观复制:使用乐观并发控制策略,先进行操作,然后在后台解决冲突。 5. 调整一致性、持久性和延迟的参数:“旋钮”机制允许用户根据应用需求调整这些特性。 6. 低总体拥有成本:Cassandra的目标是减少管理和硬件成本,支持使用廉价硬件构建大规模集群。 7. 最小化管理:设计简洁,易于管理和维护。 数据模型: Cassandra的数据模型基于键值对,同时引入了列族(Column Family)的概念。列族可以分为简单列族和超级列族。简单列族按照某一列排序,如MailList,其中每个键对应一个时间戳有序的列列表。超级列族则进一步扩展了这个概念,允许在一个键下有多个子列族,如WordList和System,它们分别按时间和名称排序。 例如: - MailList列族按名字排序,每个键(如tid1, tid2等)都有与之关联的二进制值和时间戳。 - WordList列族是一个超级列族,按时间排序,每个键(如aloha)下可能包含多个列(Column),每个列有自己的值(Value)和时间戳(TimeStamp)。 - System列族也是一个超级列族,按名称排序,每个键(如hint1, hint2等)下包含多个列列表。 Cassandra是一个针对大数据场景设计的分布式数据库,通过其独特的数据模型和分布式架构,能够处理PB级别的数据,同时提供灵活的可扩展性和高可用性,适合大规模、高并发的互联网应用。