Cassandra 体系结构
Cassandra旨在处理多个节点上的大数据工作负载而没有单点故障。它的节点之间具有对等分布式系统,数据在群集中的所有节点之间分布。
- 在Cassandra中,每个节点都是独立的,并且同时互连到其他节点。群集中的所有节点都扮演相同的角色。
- 集群中的每个节点都可以接受读取和写入请求,而不管数据实际位于集群中的什么位置。
- 如果一个节点发生故障,则可以从网络中的其他节点处理读/写请求。
Cassandra中的数据复制
在Cassandra中,群集中的节点充当给定数据片段的副本。如果某些节点的响应值已过期,则Cassandra会将最新值返回给客户端。返回最新值后,Cassandra在后台执行读取修复以更新过时的值。
请参见下图,以了解Cassandra如何在集群中的节点之间使用数据复制以进行复制的示意图。确保没有单点故障。
Cassandra的组成部分
Cassandra的主要组成部分是:
- 节点: Cassandra节点是存储数据的地方。
- 数据中心: 数据中心是相关节点的集合。
- 集群: 集群是包含一个或多个数据中心的组件。
- 提交日志: 在Cassandra中,提交日志是一种崩溃恢复机制。每个写入操作都会写入提交日志。
- 内存表: 内存表是驻留内存的数据结构。提交日志后,数据将被写入内存表。有时,对于单列家庭,会有多个内存表。
- SSTable: 是一个磁盘文件,当其内容达到阈值时,会将数据从mem表中刷新到该磁盘文件。
- 布隆过滤器: 这些只是用于测试元素是否为集合成员的快速,不确定性算法。这是一种特殊的缓存。每次查询后都会访问Bloom筛选器。
Cassandra查询语言
Cassandra查询语言(CQL)用于通过其节点访问Cassandra。 CQL将数据库(键空间)视为表的容器。程序员使用cqlsh: 使用CQL或单独的应用程序语言驱动程序的提示。
客户端可以接近任何节点进行读写操作。该节点(协调器)在客户端和保存数据的节点之间扮演代理角色。
写入操作
节点的每个写入活动都由写入节点中的提交日志捕获。之后,将捕获数据并将其存储在内存表中。每当内存表已满时,数据将被写入SStable数据文件中。所有写入将自动分区并在整个群集中复制。 Cassandra定期合并SSTable,丢弃不必要的数据。
读取操作
在读取操作中,Cassandra从内存表中获取值,并检查Bloom筛选器以找到包含所需数据的适当SSTable。
协调器将三种类型的读取请求发送给副本。
- 直接请求
- 摘要请求
- 阅读维修请求
协调器将直接请求发送到其中一个副本。之后,协调器将摘要请求发送到一致性级别指定的副本数,并检查返回的数据是否为更新的数据。
之后,协调器将摘要请求发送给所有其余副本。如果有任何节点给出了过时的值,则后台读取修复请求将更新该数据。此过程称为读取修复机制。
关系数据库与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是一个很棒的数据库,可以处理大量数据。因此,它是提供移动电话和消息服务的公司 ...