欢迎投稿

今日深度:

Cassandra学习笔记,

Cassandra学习笔记,


Cassandra (https://en.wikipedia.org/wiki/Apache_Cassandra)

1. Data Model


SQL Concept  Cassandra Concept
DB Keyspace
Table Column Family
Row (in table) Row (in Column Family)
Column Column
N/A Super Column

在column family中的每一行,类似于SQL table中的一行。但是每一行的column不需要严格定义data schema,而且column可以嵌套column。像是Map<key, Map<key, value>> 这种。

可以了解一下BigTable(https://en.wikipedia.org/wiki/Bigtable)与之类似的定义。

2. DHT存储方式

源于Amazon DynamoDB(https://en.wikipedia.org/wiki/Amazon_DynamoDB),基于分布式哈希表。

  • 使用key决定如何在节点中存储。有几种可选策略
    • hash (consistent hash): 计算k的哈希值,每一个节点负责一个哈希值范围。好处是保证负载均衡,缺点是不能进行range search (2.1版本后,可以使用value indexing进行range search)
    • byteordered: 不进行哈希,直接按序存储。优点是支持range search,但是缺点很明显:1. 无法保证traffic均匀分布在每个节点上;2. 大量读写相似数据的情况下容易使某一个节点变成hot spot.
  • replication factor: 决定数据分成几个copy
    • simpleStrategy: 不考虑data center影响,按序选择节点复制
    • NetworkStrategy: 定义每个data center复制几份
  • 保证一致性
    • Cassandra保证的是Eventually Consistency, 即:多个数据拷贝节点可能在写的时候存在一段时间不一致,但是会最终一致
      • 与之对应的强一致性指所有数据节点在写后保证永远返回最新的值
    • Cassandra几种一致性策略
      • ALL: 每次写,要等待所有的拷贝节点都ACK写成功。这样设置可以保证强一致性
      • QUORUM:每次写等待至少一半的拷贝节点都ACK写成功。注意,如果读的时候也是用这个策略(也就是读取至少一半的拷贝节点,选择timestamp最新的),则能保证强一致性,因为读写至少会共用一个节点
      • ONE/TWO/THREE:至少1/2/3个拷贝节点ACK写成功,弱一致性
3. 读/写 类似bigtable
  • 不直接写入硬盘,写时先写入内存中的memTable.达到一定条件后,转移到硬盘中的SSTable (类似于Write back cache, 保障了写的QPS).
    • 以Column Family为单位写入
    • 读取时,一个Column Family可能存储在多个SSTable上,使用Bloom Filter决定是在哪一个上进行检索
  • 节点级别,维护着一个commit log,可以用来恢复MemTable数据
  • periodically进行compaction,把一个Column Family对应的多个SSTable进行合并。

www.htsjk.Com true http://www.htsjk.com/cassandra/34920.html NewsArticle Cassandra学习笔记, Cassandra (https://en.wikipedia.org/wiki/Apache_Cassandra) 1. Data Model SQL Concept  Cassandra Concept DB Keyspace Table Column Family Row (in table) Row (in Column Family) Column Column N/A Super Column 在column...
相关文章
    暂无相关文章
评论暂时关闭