Cassandra 简明教程
Cassandra - Data Model
Cassandra 的数据模型与我们在 RDBMS 中通常看到的显著不同。本章概述了 Cassandra 如何存储其数据。
Cluster
Cassandra 数据库分布在多台协同工作的机器上。最外层容器称为集群。为了处理故障,每个节点都包含一个副本,在发生故障时,副本就会发挥作用。Cassandra 以环状格式在集群中排列节点,并将数据分配给它们。
Keyspace
键空间是 Cassandra 中数据的最外层容器。Cassandra 中键空间的基本属性有 −
-
Replication factor − 这是集群中将收到相同数据副本的机器数。
-
Replica placement strategy − 它不过是将副本放置在环中的策略。我们有 simple strategy (感知机架策略)、 old network topology strategy (感知机架策略)和 network topology strategy (数据中心共享策略)等策略。
-
Column families − 键空间是一个容器,用于存放一个或多个列族的列表。列族反过来是行集合的容器。每一行都包含有序的列。列族表示数据的结构。每个键空间至少有一个并且经常有多个列族。
创建键空间的语法如下 −
CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
以下插图展示了键空间的示意图。
Column Family
列族是有序行集合的容器。每行又是有序列的集合。以下表列出了将列族与关系数据库的表区分开来的要点。
Relational Table |
Cassandra column Family |
关系模型中的架构是固定的。一旦我们为表定义了特定列,在插入数据时,每一行中的所有列都必须至少填充一个空值。 |
在 Cassandra 中,尽管列族是已定义的,但列却没有。您可以在任何时候随时向任何列族自由添加任何列。 |
关系表只定义列,用户使用值填充表。 |
在 Cassandra 中,表包含列,或可以定义为超级列族。 |
Cassandra 列族有以下属性 −
-
keys_cached − 它表示每个 SSTable 要保留在缓存中的位置数。
-
rows_cached − 它表示其整个内容将被缓存在内存中的行数。
-
preload_row_cache − 它指定是否希望预先填充行缓存。
Note − 与列族架构固定的关系表不同,Cassandra 不会强制要求各个行具有所有列。
下图显示了 Cassandra 列族的示例。
Data Models of Cassandra and RDBMS
下表列出了将 Cassandra 的数据模型与 RDBMS 的数据模型区分开来的要点。
RDBMS |
Cassandra |
RDBMS 涉及结构化数据。 |
Cassandra 涉及非结构化数据。 |
它有一个固定的模式。 |
Cassandra 具有灵活的模式。 |
在 RDBMS 中,表是一个数组的数组。(ROW x COLUMN) |
在 Cassandra 中,表是一个由嵌套键值对组成的列表。(ROW x COLUMN key x COLUMN value) |
数据库是最外层的容器,包含与应用程序对应的数据。 |
键空间是最外层的容器,包含与应用程序对应的数据。 |
表是数据库的实体。 |
表或列族是键空间的实体。 |
行是 RDBMS 中的单个记录。 |
行是 Cassandra 中的复制单元。 |
列表示关系的属性。 |
列是 Cassandra 中的存储单元。 |
RDBMS 支持外键、连接的概念。 |
Cassandra 使用集合来表示关系。 |