📜  Cassandra体系结构

📅  最后修改于: 2020-11-22 06:48:36             🧑  作者: Mango

Cassandra建筑

Cassandra旨在处理多个节点上的大数据工作负载而没有单点故障。它在其节点之间具有对等分布式系统,并且数据分布在集群中的所有节点之间。

  • 在Cassandra中,每个节点都是独立的,并且同时互连到其他节点。集群中的所有节点都扮演相同的角色。
  • 群集中的每个节点都可以接受读写请求,而不管数据实际位于群集中的何处。
  • 在一个节点发生故障的情况下,可以从网络中的其他节点处理读/写请求。

Cassandra中的数据复制

在Cassandra中,群集中的节点充当给定数据片段的副本。如果某些节点的响应值已过期,则Cassandra会将最新值返回给客户端。返回最新值后,Cassandra在后台执行读取修复以更新过时的值。

请参见下图以了解Cassandra如何在集群中的节点之间使用数据复制以确保没有单点故障的示意图。

Cassandra的组成

Cassandra的主要成分是:

  • 节点: Cassandra节点是存储数据的地方。
  • 数据中心:数据中心是相关节点的集合。
  • 群集:群集是包含一个或多个数据中心的组件。
  • 提交日志:在Cassandra中,提交日志是一种崩溃恢复机制。每个写操作都会写入提交日志。
  • 内存表:内存表是驻留内存的数据结构。提交日志后,数据将被写入内存表。有时,对于单列家庭,将有多个内存表。
  • SSTable:这是一个磁盘文件,当其内容达到阈值时,会将数据从内存表中刷新到该磁盘文件中。
  • 布隆过滤器:这些不过是用于测试元素是否为集合成员的快速,不确定性算法。这是一种特殊的缓存。每次查询后都会访问Bloom筛选器。

Cassandra查询语言

Cassandra查询语言(CQL)用于通过其节点访问Cassandra。 CQL将数据库(键空间)视为表的容器。程序员使用cqlsh:使用CQL或单独的应用程序语言驱动程序的提示。

客户端可以使用任何节点进行读写操作。该节点(协调器)在客户端和保存数据的节点之间扮演代理角色。

写操作

节点的每个写入活动均由写入节点中的提交日志捕获。之后,将捕获数据并将其存储在内存表中。每当内存表已满时,数据将被写入SStable数据文件中。所有写入将自动分区并在整个群集中复制。 Cassandra定期合并SSTable,丢弃不必要的数据。

读取操作

在读取操作中,Cassandra从内存表中获取值,并检查Bloom筛选器以找到包含所需数据的适当SSTable。

协调器将三种类型的读取请求发送到副本。

  • 直接要求
  • 摘要请求
  • 阅读维修要求

协调器将直接请求发送到副本之一。之后,协调器将摘要请求发送到一致性级别指定的副本数,并检查返回的数据是否为更新的数据。

此后,协调器将摘要请求发送到所有其余副本。如果有任何节点给出了过时的值,则后台读取修复请求将更新该数据。此过程称为读取修复机制。