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