Cassandra 简明教程

Cassandra - Data Model

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

Cluster

Cassandra 数据库分布在多台协同工作的机器上。最外层容器称为集群。为了处理故障,每个节点都包含一个副本,在发生故障时,副本就会发挥作用。Cassandra 以环状格式在集群中排列节点,并将数据分配给它们。

Keyspace

键空间是 Cassandra 中数据的最外层容器。Cassandra 中键空间的基本属性有 −

  1. Replication factor − 这是集群中将收到相同数据副本的机器数。

  2. Replica placement strategy − 它不过是将副本放置在环中的策略。我们有 simple strategy (感知机架策略)、 old network topology strategy (感知机架策略)和 network topology strategy (数据中心共享策略)等策略。

  3. Column families − 键空间是一个容器,用于存放一个或多个列族的列表。列族反过来是行集合的容器。每一行都包含有序的列。列族表示数据的结构。每个键空间至少有一个并且经常有多个列族。

创建键空间的语法如下 −

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

以下插图展示了键空间的示意图。

keyspace

Column Family

列族是有序行集合的容器。每行又是有序列的集合。以下表列出了将列族与关系数据库的表区分开来的要点。

Relational Table

Cassandra column Family

关系模型中的架构是固定的。一旦我们为表定义了特定列,在插入数据时,每一行中的所有列都必须至少填充一个空值。

在 Cassandra 中,尽管列族是已定义的,但列却没有。您可以在任何时候随时向任何列族自由添加任何列。

关系表只定义列,用户使用值填充表。

在 Cassandra 中,表包含列,或可以定义为超级列族。

Cassandra 列族有以下属性 −

  1. keys_cached − 它表示每个 SSTable 要保留在缓存中的位置数。

  2. rows_cached − 它表示其整个内容将被缓存在内存中的行数。

  3. preload_row_cache − 它指定是否希望预先填充行缓存。

Note − 与列族架构固定的关系表不同,Cassandra 不会强制要求各个行具有所有列。

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

cassandra column family

Column

列是 Cassandra 的基本数据结构,具有三个值,即键或列名、值和时间戳。以下是列的结构。

cassandra structure of column

SuperColumn

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

基本上,列族存储在各个文件中。因此,为了优化性能,将您可能一起查询的列保留在同一列族中非常重要,而超级列在这一点上会很有帮助。以下是超级列的结构。

cassandra super column

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 使用集合来表示关系。