1 Cassandra 简介

Wu Jun 2020-03-14 22:00:28
11 分布式 > 03 分布式存储 > 06 Cassandra

官方文档 (不完整,很多todo)

Datastax

CQL语法

1 Cassandra简介

特性

2 存储过程

用户可以使用Cassandra查询语言(CQL)通过其节点访问Cassandra。

写操作

  1. 将新记录写入CommitLog;
  2. 将新纪录写入Memtable;
  3. 达到阈值, 将Memtable中的数据刷入到磁盘上的SSTables, 清空JVM Heap和CommitLog;
  4. 达到阈值, 将SSTables压缩合并.

读操作

读取时,Cassandra 需要结合 memtable 和可能多个 SSTable 的结果。

  1. 检查 memtable。
    • 在 Memtable 中找到 Key 的 value
  2. 检查 Row Cache
    • 若在缓存中找到 value,返回。
    • 若缓存中没有找到,查找每个 SSTable 的 BloomFilter,看是否在该 SSTable 中。
  3. 若在该SSTable
    • 查找 SSTable 的 Partition Summary。确定 Key 在 Partition Index 中的大概位置。
    • 查找 Partition Index 中 Key 位于 SSTable 中的偏移量。
    • 查找完成之后将 Key 位于每个 SSTable 中的偏移量放入 Key Cache 中。
  4. 合并 SSTable 与 Memtable 数据
    • 在各个 SSTable 中找到 Key 的所有 value,再在 Memtable 中找到 Key 的 value。
    • 对所有的 value 进行合并操作,原则是取时间戳最新的数据作为正确地数据。
  5. 将合并后的数据返回给 Coordinator 并且将 Key 及其 value 放入 Row Cache 缓存中。

Read request flow

Row cache and Key cache request flow
image

3 数据一致性

Cassandra 的一致性是可配置调整的:

4 客户端

客户端连接到某一节点发起读或写请求时,该节点充当客户端应用于拥有相当数据的节点数据的节点间的协调者,用以根据集群配置确定环(ring)中的哪个节点应当获取这个请求。