Cassandra - 数据模型

Cassandra的数据模型与我们在RDBMS中通常看到的数据模型有很大不同.本章概述了Cassandra如何存储其数据.

群集

Cassandra数据库分布在多个一起运行的计算机上.最外层的容器称为Cluster.对于故障处理,每个节点都包含一个副本,如果发生故障,副本将负责. Cassandra以环形格式安排集群中的节点,并为它们分配数据.

Keyspace

Keyspace是数据的最外层容器卡桑德拉. Cassandra中Keyspace的基本属性是 :

  • 复制因子 : 它是群集中将接收相同数据副本的计算机数量.

  • 副本放置策略 : 它只不过是将复制品置于戒指中的策略.我们有策略,例如简单策略(机架感知策略),旧网络拓扑策略(机架感知策略)和网络拓扑策略 (数据中心共享策略).

  • 列族 :  Keyspace是一个或多个列族列表的容器.反过来,列族是行集合的容器.每行包含有序列.列族表示数据的结构.每个键空间至少有一个且通常很多列族.

创建Keyspace的语法如下 :

CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};

下图显示了Keyspace的示意图.

Keyspace

列族

列族是有序行集合的容器.反过来,每一行都是有序的列集合.下表列出了将列族与关系数据库表区分开的点.

关系表Cassandra列族
关系模型中的模式是固定.一旦我们为表定义某些列,在插入数据时,在每一行中,所有列必须至少填充一个空值.在Cassandra中,尽管已定义列族,列不是.您可以随时自由地将任何列添加到任何列族.
关系表仅定义列,用户填写带有值的表.在Cassandra中,表包含列,或者可以定义为超列族.

Cassandra列族具有以下属性 :

  • keys_cached : 它表示每个SSTable保持缓存的位置数.

  • rows_cached : 它表示整个内容将缓存在内存中的行数.

  • preload_row_cache : 它指定是否要预先填充行缓存.

注意和减号; 与关系表不同列系列的模式不固定,Cassandra不会强制单个行包含所有列.

下图显示了Cassandra列族的示例.

Cassandra Column Family

列是Cassandra的基本数据结构有三个值,即键
或列名,值和时间戳.下面给出的是列的结构.

Cassandra Column Of Column

SuperColumn

超级列是一个特殊列,因此它也是一个键值对.但是超级列存储子列的映射.

通常,列族存储在单个文件的磁盘上.因此,为了优化性能,重要的是将您可能在同一列族中查询的列保持在一起,并且超级列在此处可能会有所帮助.以下是超级列的结构.

Cassandra Super Column

Cassandra和RDBMS的数据模型

下表列出了区分Cassandra数据模型和RDBMS数据模型的要点.

RDBMSCassandra
RDBMS处理结构化数据.Cassandra处理非结构化数据.
它有一个固定的架构.Cassandra具有灵活的架构.
在RDBMS中,表是一个数组数组. (ROW x COLUMN)在Cassandra中,表是"嵌套键值对"的列表. (ROW x COLUMN键x COLUMN值)
数据库是包含与应用程序对应的数据的最外层容器.Keyspace是最外面的容器,包含与应用程序对应的数据.
表是数据库的实体.表或列系列是键空间的实体.
Row是RDBMS中的单个记录.行是Cassandra中的复制单位.
列表示关系的属性.列是Cassandra中的存储单位.
RDBMS支持外键,连接的概念.关系用集合表示.