Cassandra数据库知识点

之前公司的项目中使用过一段时间Cassandra数据库,这里整理下相关知识点。

特点

  1. NoSQL中的列式数据库
  2. P2P的去中心化架构
  3. 使用DHT(分布式哈希表)将key分布到不同的节点中
  4. 极高的读写性能
  5. 部署简单(3台机器就可以部署一个集群)

架构

cassandra-architecture-labels-cassandra-database-architecture-better

  1. Gossip

    内部P2P通信协议, 定期交换node位置信息、状态信息和数据。
  2. Partitioner,决定数据如何分配到节点。
  3. Replica placement strategy,备份策略。
  4. Snitch,集群的网络拓扑,负责路由client的CRUD等请求。

读写原理

cassandra_read_write

写数据

  1. 数据先到Commit Log
  2. 然后写到Memtable,Memtable是内存表,里面的数据存满后刷新到SSTable,内存表刷新时停止新的写请求
  3. SSTable在硬盘里,是Log-Structure Table结构,支持并发写入。写入是顺序写入,每条信息不管是Insert还是Update都是追加到SStable中,后期由数据整理操作处理。
  4. MemTable写完后清楚Commit Log,增加磁盘空间。

读数据

  1. 检查SSTable的Bloom filter,确认partition key是否在本节点
  2. 如果在,则到partition key map中寻早key对应的索引,根据索引寻找压缩的数据,然后返回
  3. 如果没找到索引,则到磁盘上顺序查找数据
  4. 根据Consistency Level(一致性策略),确定查找的节点数,将所有的节点数据拿到后整理数据,返回最终结果

读数据分两种:

  1. Read Request,普通读,返回数据
  2. Background Read Repair Request,后台修复数据

Reference

comments powered by Disqus