📜  Apache Cassandra 的架构(1)

📅  最后修改于: 2023-12-03 15:13:25.515000             🧑  作者: Mango

Apache Cassandra 的架构

Apache Cassandra 是一个分布式 NoSQL 数据库,具有分布式、高可用、高扩展性等特点,适合在大规模分布式系统中存储海量数据,目前被广泛应用在金融、电商等领域。

总体架构

Apache Cassandra 的总体架构如下图所示:

Cassandra architecture

Cassandra 架构包含一组节点,其中每个节点维护数据的一部分,所有节点组合在一起就可以存储整个数据集。每个节点都可以独立工作,接受客户端请求、执行读写操作。节点之间通过 gossip 协议通信,网状拓扑结构下的 gossip 通信保证了每个节点完全知晓集群拓扑结构信息。

其中,Cassandra 最重要的特征就是数据的分区、分片和复制,即将数据拆分分配到不同节点中存储,并在不同节点间复制数据以保证高可用性。

数据模型

Cassandra 的数据模型是基于列族的,列族是一组相关列的集合,其中每个列都有唯一的列名和值。Cassandra 的列族由多个列组成的行组成,与传统关系型数据库中的行列对应。但是一个列族可以包含非常多的列,并且每个行的列数不需要相等,因此 Cassandra 可以轻松应对任何类型的数据。

此外,Cassandra 还支持多维列族,即列名不仅可以是列族中的列名,还可以包括其他关键词,例如 user.posts.time,这种多维列族的特点使 Cassandra 更加灵活。

分区和复制

Cassandra 使用称为 Vnode 的技术来划分节点上的数据。Vnode 是 Cassandra 中的一个逻辑概念,表示节点上的数据被划分为多个范围。每个节点管理多个 Vnode,称为 Token Ring。每个 Vnode 的范围由一个起始标记和一个结束标记确定,其范围由所在节点的哈希值确定。这种哈希分区技术使得 Cassandra 节点间的数据分散在多个节点上,从而减少了数据热点的问题。

在 Cassandra 中,每个 Vnode 都会被复制到多个节点上,以此来提高数据的可用性。复制因子是用于控制数据在集群中的复制次数(即副本数),常见的复制因子为 2 或 3,这取决于数据的一致性和可用性需求。每个 Vnode 的副本分散在 Token Ring 上的不同节点上,通过读写操作来确保数据的一致性和可用性。

操作和存储

Cassandra 的读写操作是按行进行的,而非按列。读写操作可以通过以下方式进行:

  • 查询整个行集合:查询整个行,这个操作类似于传统关系型数据库的“select *”,返回整个行的集合。
  • 查询单个列:查询单个列,这个操作与数据库中的查询语言非常相似,可以根据列族中的列名查询特定列的值。
  • 查询多个列:查询多个列,这个操作也类似于关系型数据库的查询操作,可以查询指定列的值。
  • 更新行:更新行,这个操作类似于传统数据库的 update 语句。
  • 更新列:更新列,这个操作与数据库中的查询操作类似,可以根据列族和列名更新特定列的值。

Cassandra 的数据存储是使用 Log-Structured Merge Tree(LSM Tree)的方式来工作的。LSM Tree 是一种多级索引的方式,以较小的内存开销和更少的磁盘寻址来进行范围查询,并建立了一个磁盘结构用于优化数据写入。

总结

Apache Cassandra 是一个分布式、高可用、高扩展性的 NoSQL 数据库,采用数据的分区、分片和复制来保证数据的可用性和一致性。Cassandra 的数据模型基于列族,可以非常灵活地存储任何类型的数据。Cassandra 使用 Vnode 技术来处理数据分区和复制,以及 LSM Tree 来处理数据存储。