Cassandra 体系结构

 

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

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

 

Cassandra中的数据复制

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

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

Cassandra Architecture 1

 

Cassandra的组成部分

Cassandra的主要组成部分是:

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

 

Cassandra查询语言

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

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

 

写入操作

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

Cassandra Architecture 2

 

读取操作

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

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

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

 

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

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

Cassandra Architecture 3

 

关系数据库与NoSQL数据库

Cassandra是NoSQL数据库。 NoSQL数据库的主要目标是具有以下三点:

  • 设计的简单性
  • 水平缩放
  • 高可用性

 

NoSQL比关系数据库管理系统快,因为与关系数据库相比,它使用不同的数据结构。

Cassandra数据结构比关系数据库结构快。 NoSQL数据库主要用于Bigdata和实时Web应用程序中。

 

NoSQL与关系数据库之间的区别

NoSQL数据库 关系数据库
NoSQL数据库支持一种非常简单的查询语言。 关系数据库支持强大的查询语言。
NoSQL数据库没有固定的架构。 关系数据库具有固定的架构。
NoSQL数据库最终只会保持一致。 关系数据库遵循酸性质。(原子性,一致性,隔离性和耐久性)
NoSQL数据库不支持事务(仅支持简单事务)。 关系数据库支持事务(也包括具有联接的复杂事务)。
NoSQL数据库用于处理高速传入的数据。 关系数据库用于处理速度较慢的数据。
NoSQL的数据来自许多位置。 关系数据库中的数据从一个或几个位置到达。
NoSQL数据库可以管理结构化,非结构化和半结构化数据。 关系数据库仅管理结构化数据。
NoSQL数据库没有单点故障。 关系数据库具有故障转移的单点故障。
NoSQL数据库可以处理大数据或大量数据。 NoSQL数据库用于处理少量数据。
NoSQL具有分散的结构。 关系数据库具有集中式结构。
NoSQL数据库提供读写扩展性。 关系数据库仅提供读取可伸缩性。
NoSQL数据库以横向方式部署。 关系数据库以垂直方式部署。

 Cassandra可以用于不同类型的应用程序。以下是应优先使用Cassandra的用例列表: 消息Cassandra是一个很棒的数据库,可以处理大量数据。因此,它是提供移动电话和消息服务的公司 ...