📅  最后修改于: 2020-12-02 06:12:05             🧑  作者: Mango
Cassandra的设计目标是在多个节点上处理大数据工作负载而不会出现任何单点故障。 Cassandra在其节点之间具有对等分布式系统,并且数据分布在集群中的所有节点之间。
集群中的所有节点都扮演相同的角色。每个节点都是独立的,并同时互连到其他节点。
群集中的每个节点都可以接受读写请求,而不管数据实际位于群集中的何处。
当某个节点发生故障时,可以从网络中的其他节点处理读/写请求。
在Cassandra中,群集中的一个或多个节点充当给定数据段的副本。如果检测到某些节点响应的值过时,则Cassandra会将最新值返回给客户端。返回最新值后,Cassandra在后台执行读取修复以更新过时的值。
下图显示了Cassandra如何在集群中的节点之间使用数据复制以确保没有单点故障的示意图。
注– Cassandra在后台使用Gossip协议,以允许节点相互通信并检测群集中的任何故障节点。
卡桑德拉的主要组成部分如下-
节点-它是存储数据的地方。
数据中心-它是相关节点的集合。
群集-群集是包含一个或多个数据中心的组件。
提交日志-提交日志是Cassandra中的崩溃恢复机制。每个写操作都会写入提交日志。
内存表-内存表是驻留内存的数据结构。提交日志后,数据将被写入内存表。有时,对于单列家庭,将有多个内存表。
SSTable-这是一个磁盘文件,当其内容达到阈值时,会将数据从内存表中刷新到该磁盘文件中。
布隆过滤器-这些不过是用于测试元素是否为集合成员的快速,不确定性算法。这是一种特殊的缓存。每次查询后都会访问Bloom筛选器。
用户可以使用Cassandra查询语言(CQL)通过其节点访问Cassandra。 CQL将数据库(键空间)视为表的容器。程序员使用cqlsh:使用CQL或单独的应用程序语言驱动程序的提示。
客户端接近任何节点以进行读写操作。该节点(协调器)在客户端和保存数据的节点之间扮演代理角色。
节点的每个写入活动都由写入节点中的提交日志捕获。之后,将捕获数据并将其存储在内存表中。每当内存表已满时,数据将被写入SStable数据文件中。所有写入将自动分区并在整个群集中复制。 Cassandra定期合并SSTable,丢弃不必要的数据。
在读取操作期间,Cassandra从内存表中获取值,并检查Bloom筛选器以找到保存所需数据的适当SSTable。