认识Cassandra

Posted SHAREit技术团队

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识Cassandra相关的知识,希望对你有一定的参考价值。


一、本文受众
对数据库有一定了解的软件工程师。

 

二、本文目的

了解Cassandra的功能、架构、原理。

 

三、介绍

1.定义

是一个高度可扩展的高性能分布式数据库,用于处理大量商用服务器上的大量数据,提供高可用性,无单点故障,是一种NoSQL类型的数据库。
根据其核心特性,可归纳为:开源、分布式、去中心化、可扩展性、高可用、容错性、可配置的一致性、行存储。


2.数据类型

1)基础类型:

     包括了varchar、ascii、int、float、double、boolean、timestamp等数据类型。

2)集合类型:

除基础类型外,支持了3种集合类型,如下表所示

认识Cassandra

四、原理

1.数据模型

集群(Cluster)

数据库分布在几个一起操作的机器上。最外层容器被称为群集。对于故障处理,每个节点包含一个副本,如果发生故障,副本将复制。Cassandra 按照环形格式将节点排列在集群中,并为它们分配数据。

 

键空间 (Keyspace)

键空间是 Cassandra 中数据的最外层容器。一个键空间的基本属性包括:
  • 复制因子 - 它是集群中将接收相同数据副本的计算机数。

  • 副本放置策略 - 它只是把副本放在介质中的策略。我们有简单策略(机架感知策略),旧网络拓扑策略(机架感知策略)和网络拓扑策略(数据中心共享策略)等策略。

  • 列族 - 键空间是一个或多个列族的列表的容器。列族又是一个行集合的容器。每行包含有序列。列族表示数据的结构。每个键空间至少有一个,通常是许多列族。

认识Cassandra

列族(Column Family)

列族是有序收集行的容器。每一行又是一个有序的列集合,其具有以下属性:
  • keys_cached - 它表示每个 SSTable 保持缓存的位置数。

  • rows_cached - 它表示其整个内容将在内存中缓存的行数。

  • preload_row_cache -它指定是否要预先填充行缓存。

- 与不是固定列族的模式的关系表不同,Cassandra 不强制单个行拥有所有列。

下图显示了 Cassandra 列族的示例。


认识Cassandra


列(Column)

列是的基本数据结构,由键或列名称,值和时间戳构成。其具体结构如下:

认识Cassandra

超级列(Super Column)

超级列是一个特殊列,其也是一个键值对。标准列存的是字节组,而超级列中存储的子列集合

认识Cassandra

2.存储结构

Cassandra 不能算一个严格的行存储,当然它更不是列存储

行存 & 列存

行存:Row based storage stores a table in a sequence of row.

列存:Column based storage stores a table in a sequence of columns.

认识Cassandra

不是列式

1)其一列的数据并不存储在连续的物理空间上

2)不同Key的数据分布在不同的数据库节点/分区上,列级操作会在多个节点上进行操作

 

归为行存

1)每行数据围绕着Partition Key存储在一起

2)很好支持了按Key+Column的方式进行数据读写


3.单机引擎

Cassandra的单机引擎主要借鉴于Google Bigtable,使用了LsmTree,一种分层,有序,面向磁盘的数据结构,是一种典型的随机IO转顺序IO的架构。
  • WAL(write ahead log):也称预写log,当插入一条数据时,数据最先写入 WAL中,这样就保证了数据的持久化,不会丢失数据,并且都是顺序写,速度很快。当程序挂掉重启时,可以从 WAL 文件中重新恢复内存中的 MemTable。

  • MemTable:是WAL在内存中的存储结构,通常用  来实现。MemTable 提供了 k-v 数据的写入、删除以及读取的操作接口。其内部将 k-v 对按照 key 值有序存储,这样方便之后快速序列化到 SSTable 文件中,仍然保持数据的有序性。

  • Immutable Memtable:是在内存中只读的MemTable,当MemTable占用的内存达到阀值后就自动转换为 Immutable Memtable,系统此时会生成新的 MemTable 供写操作继续写入。其目的是为了避免将 MemTable 中的内容序列化到磁盘中时会阻塞写操作。

  • SSTable:是数据在磁盘上的有序存储,其内部数据是根据 key 从小到大排列的。加快查找的速度,会在SSTable中加入数据索引,可快读定位到指定的 k-v 数据。

     

4.分布式特性
1)数据分区及移动策略:
Cassandra中使用了一致性hash策略,一致性哈希将整个哈希值空间组织成一个虚拟的圆环,在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。
主要解决:
  • 数据的均匀分布问题

  • 扩缩容过程中的数据失效及读写失败问题

2)故障检测及消息传播:
Cassandra中应用了去中心化的Gossip协议,一种点对点通信协议,用于发现和共享有关 Cassandra 集群中其他节点的位置和状态信息。
主要解决:
  • 成员维护

  • 故障发现

  • 消息传播 

3)可调一致性:
Cassandra通过设置读写时最少响应节点的数量,实现了可调的一致性。
可选的一致性级别:ANY, ONE, TWO,THREE, QUORUM, ALL
其中QUORUM、ALL是强一致性,其余是最终一致性。


参考资料:

https://cassandra.apache.org/

https://en.wikipedia.org/wiki/Cassandra

https://dbaplus.cn/news-160-2964-1.html

https://www.w3xue.com/exp/article/20205/85794.html

https://blog.csdn.net/ZZQHELLO2018/article/details/106332802

https://my.oschina.net/silentriver/blog/182814


 SHAREit技术团队 

以上是关于认识Cassandra的主要内容,如果未能解决你的问题,请参考以下文章

对“认识”的认识

1.认识ROS

认识的本质是建立思维模型

GEOHASH的一点认识

WKWebView详解(三)Cookie的认识

2016.2.19 学习总结