认识Cassandra
Posted SHAREit技术团队
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识Cassandra相关的知识,希望对你有一定的参考价值。
二、本文目的
三、介绍
1.定义
2.数据类型
1)基础类型:
包括了varchar、ascii、int、float、double、boolean、timestamp等数据类型。
2)集合类型:
除基础类型外,支持了3种集合类型,如下表所示
四、原理
1.数据模型
集群(Cluster)
键空间 (Keyspace)
复制因子 - 它是集群中将接收相同数据副本的计算机数。
副本放置策略 - 它只是把副本放在介质中的策略。我们有简单策略(机架感知策略),旧网络拓扑策略(机架感知策略)和网络拓扑策略(数据中心共享策略)等策略。
列族 - 键空间是一个或多个列族的列表的容器。列族又是一个行集合的容器。每行包含有序列。列族表示数据的结构。每个键空间至少有一个,通常是许多列族。
列族(Column Family)
keys_cached - 它表示每个 SSTable 保持缓存的位置数。
rows_cached - 它表示其整个内容将在内存中缓存的行数。
preload_row_cache -它指定是否要预先填充行缓存。
注 - 与不是固定列族的模式的关系表不同,Cassandra 不强制单个行拥有所有列。
下图显示了 Cassandra 列族的示例。
列(Column)
列是的基本数据结构,由键或列名称,值和时间戳构成。其具体结构如下:
超级列(Super Column)
超级列是一个特殊列,其也是一个键值对。标准列存的是字节组,而超级列中存储的子列集合
2.存储结构
(Cassandra 不能算一个严格的行存储,当然它更不是列存储)
行存 & 列存:
行存:Row based storage stores a table in a sequence of row.
列存:Column based storage stores a table in a sequence of columns.
不是列式
1)其一列的数据并不存储在连续的物理空间上
2)不同Key的数据分布在不同的数据库节点/分区上,列级操作会在多个节点上进行操作
归为行存
1)每行数据围绕着Partition Key存储在一起
2)很好支持了按Key+Column的方式进行数据读写
3.单机引擎
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 数据。
数据的均匀分布问题
扩缩容过程中的数据失效及读写失败问题
成员维护
故障发现
消息传播
参考资料:
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的主要内容,如果未能解决你的问题,请参考以下文章