Cassandra 的数据模型是基于列族(Column Family)的四维或五维模型。它借鉴了 Amazon 的 Dynamo 和 Google’s BigTable 的数据结构和功能特点,采用 Memtable 和 SSTable 的方式进行存储。
1 KeySpace(键空间)
- 相当于database。
- 是用于存放一个或多个列族的列表的容器。
//设置一个副本策略是 SimpleStrategy 的 class,副本数量是 3
KEYSPACE Excelsior
WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor' : 3};
//设置支持跨数据中心备份的 NetworkToplogyStrategy 策略,数据中心名字是 datacenter1
CREATE KEYSPACE NTSkeyspace
WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy','datacenter1' : 1 };
2 ColumnFamily(列族)
- 相当于table
- 列族是一系列Row(行)的容器。可以想象为Map,Row是键值对,Row Key为键,Column为值。
- Cassandra不强制单个行拥有所有列。
3 Column(列)
- 相当于属性。
- 存储的基本单元,也相当于Map,每个 Column Key 对应一个 Colum Value。
- 由 name , value , timestamp 组成。
- V1.1 版本之后,扩展了一个新的属性,即TTL(存活时间)
4 SuperColumn(超级列)
- 特殊的 Column
- 它的 Value 值是一个可包含多个 Column 的 Map
- 单个 Super Column 数据量大时序列化效率低,从 V2.0.0 开始淘汰了
- Cassandra 3.x之后,存储引擎被重写了,使用新模型,如clustering column