Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook于2008年7月始发,用于储存特别大的数据,Facebook目前在使用此系统。Cassandra的名称来源于希腊神话,是特洛伊的一位悲剧性的女先知的名字,因此项目的Logo是一只放光的眼睛。采用Java编写开发并在ApacheV2协议下授权。

该项目由就职于Facebook的Avinash Lakshman(也是Amazon Dynamo的作者之一)和Prashant Malik在为Facebook的Inbox编写。Facebook将其于2008年开源,并于2009年成为了Apache软件基金会的Incubator项目,在2010年2月走出孵化器,成为正式的基金会项目。
主要特性:
* 分布式
* 基于列(column)的结构化
* 高伸展性
Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对其的一个写操作会被复制到其他节点上去,读操作也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能 是比较简单的事情,只管在群集里面添加节点就可以了。
Cassandra使用了Google BigTable的数据模型,与面向行的传统的关系型数据库不同,这是一种面向列的数据库,列被组织成为列族(Column Family),在数据库中增加一列非常方便。对于搜索和一般的结构化数据存储,这个结构足够丰富和有效。
Cassandra的系统架构与Dynamo一脉相承,是基于O(1)DHT(分布式哈希表)的完全P2P架构,与传统的基于Sharding的数据库集群相比,它可以几乎无缝地加入或删除节点,非常适于对于节点规模变化比较快的应用场景。
Cassandra的数据会写入多个节点,来保证数据的可靠性,在一致性、可用性和网络分区耐受能力(CAP)的折衷问题上,Cassandra比较灵活,用户在读取时可以指定要求所有副本一致(高一致性)、读到一个副本即可(高可用性)或是通过选举来确认多数副本一致即可(折衷)。这样Cassandra可以适用于有节点、网络失效、以及多数据中心的场景。
Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比 Dynomite (分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型)。它是一个网络社交云计算方面理想的数据库,以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型,P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。其支持对一列数据进行insert、update、或delete操作。其中insert和update虽然语法略有区别,但语义上等价,即可以针对已经存在的行进行update或insert一个不存在的行。从2.0版开始,Cassandra支持轻量级事务。这种事务被称为"compare-and-set",简称CAS。通过paxos算法实现在满足某条件后才修改数据否则不修改。目前支持"insert if not exist"、"update if col=value"、"delete if exist"等几种操作。
和其他数据库比较,有几个突出特点:
模式灵活:使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段,这是一个惊人的效率提升,特别是在大型部署上。
真正的可扩展性:Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。
多数据中心识别:你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。
一些使Cassandra提高竞争力的其他功能:
范围查询:如果你不喜欢全部的键值查询,则可以设置键的范围来查询。
列表数据结构:在混合模式可以将超级列添加到5维,对于每个用户的索引,这是非常方便的。
分布式写操作:有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。
HBase是Apache Hadoop项目的一个子项目,是Google BigTable的一个克隆,与Cassandra一样都使用了BigTable的列族式的数据模型,但是:
1.Cassandra只有一种节点,而HBase有多种不同角色,除了处理读写请求的region server之外,其架构在一套完整的HDFS分布式文件系统之上,并需要ZooKeeper来同步集群状态,部署上Cassandra更简单。
2.Cassandra的数据一致性策略是可配置的,可选择是强一致性还是性能更高的最终一致性;而HBase总是强一致性的。
3.Cassandra通过一致性哈希来决定一行数据存储在哪些节点,靠概率上的平均来实现负载均衡;而HBase每段数据(region)只有一个节点负责处理,由master来动态分配一个region是否大到需要拆分成两个,同时会将过热的节点上的一些region动态的分配给负载较低的节点,因此实现动态的负载均衡。
4.因为每个region同时只能有一个节点处理,一旦这个节点无响应,在系统将这个节点的所有region转移到其他节点之前这些数据便无法读写,加上master也只有一个节点,备用master的恢复也需要时间,因此HBase在一定程度上有单点问题;而Cassandra无单点问题。
5.Cassandra的读写性能优于HBase。
最新版本:3.0
在 3.0 版本中,Cassandra 将引入新的特性—— 物化视图。物化视图可以处理自动化服务端的非规范化,移除客户端处理非规范化的需求,并且能确保基库(base)和视图数据的最终一致性。这个非规范化允许每个视图数据的超快速查询使用正常的 Cassandra 读取路径。
最新版本:4.0
在经历了推迟之后,Apache Cassandra 4.0 现已于2021年7月末正式发布。这是一套开源分布式 Key-Value 存储系统,它最初由 Facebook 开发,用于储存特别大的数据。其副总裁 Nate McCall 称,Cassandra 4.0 是一个漫长的过程,也是迄今为止测试最彻底的 Cassandra。最新版本速度更快、可扩展性更强,并支持企业安全功能,可在云中以前所未有的规模进行生产。可以轻松处理非结构化数据,每秒写入数千次。经过三年的酝酿,v4.0 带来了 1000 多项 bug 修复、改进和新特性,其中包括有:
更高的速度和可扩展性 — 在扩展操作期间流式传输数据最多可提高 5 倍,读写吞吐量最多可提高 25%;从而提供更具弹性的架构,尤其是在云和 Kubernetes 部署中。
提高一致性:保持数据副本同步以优化增量修复,以实现更快、更高效的操作和跨数据副本的一致性。
增强的安全性和可观察性:审计日志跟踪用户访问和活动,对工作负载性能的影响最小。新的捕获和重放支持对生产工作负载进行分析,以帮助确保符合 SOX、PCI、GDPR 或其他要求的监管和安全合规性。
新的配置设置:公开的系统指标和配置设置为操作员提供了灵活性,以确保他们可以轻松访问优化部署的数据。
最小化延迟:Garbage Collector 的暂停时间减少到几毫秒,而不会随着堆大小的增加而降低延迟。
更好的压缩:改进的压缩效率减轻了磁盘空间上不必要的压力并提高了读取性能。
官方表示,目前 Cassandra 4.0 已通过 Amazon、Apple、DataStax、Instaclustr、iland、Netflix 和其他通常运行多达 1000 个节点的集群并具有数百个实际用例和模式的社区强化和测试。Apache Cassandra 社区部署了多个测试和质量保证 (QA) 项目和方法来部署迄今为止最稳定的版本。在测试和 QA 期间,社区生成了尽可能接近现实生活的可重现工作负载,同时根据模型有效验证集群状态,而不会暂停工作负载本身。贡献者 Scott Andreas 称,“Apache Cassandra 的贡献者们努力工作,致力于将 Cassandra 4.0 作为该项目迄今为止最稳定的版本发布,从而为部署到生产关键的云服务做好准备。Cassandra 4.0 还带来了新特性,例如更快的主机更换、主动数据完整性断言、增量修复和更好的压缩。该项目对高级验证工具的投资意味着 Cassandra 用户可以期待顺利的升级。一旦发布,Cassandra 4.0 也将为未来功能的开发和数据库的长期演进提供了稳定的基础。”
除了 Cassandra 4.0 之外,该项目还宣布转向一年一次的发布周期,发布的版本将得到三年的支持。详情可查看此处。