- Cassandra 教程
- Cassandra - 首页
- Cassandra - 简介
- Cassandra - 架构
- Cassandra - 数据模型
- Cassandra - 安装
- Cassandra - 参考 API
- Cassandra - Cqlsh
- Cassandra - Shell 命令
- Cassandra Keyspace 操作
- Cassandra - 创建 Keyspace
- Cassandra - 修改 Keyspace
- Cassandra - 删除 Keyspace
- Cassandra 表操作
- Cassandra - 创建表
- Cassandra - 修改表
- Cassandra - 删除表
- Cassandra - 截断表
- Cassandra - 创建索引
- Cassandra - 删除索引
- Cassandra - 批处理
- Cassandra CURD 操作
- Cassandra - 创建数据
- Cassandra - 更新数据
- Cassandra - 读取数据
- Cassandra - 删除数据
- Cassandra CQL 类型
- Cassandra - CQL 数据类型
- Cassandra - CQL 集合
- CQL 用户自定义数据类型
- Cassandra 有用资源
- Cassandra - 快速指南
- Cassandra - 有用资源
- Cassandra - 讨论
Cassandra - 数据模型
Cassandra 的数据模型与我们在关系数据库管理系统 (RDBMS) 中通常看到的模型显著不同。本章概述了 Cassandra 如何存储其数据。
集群
Cassandra 数据库分布在多台协同工作的机器上。最外层的容器称为集群。为了处理故障,每个节点都包含一个副本,在发生故障的情况下,副本将接管。Cassandra 以环形格式在集群中排列节点,并将数据分配给它们。
Keyspace
Keyspace 是 Cassandra 中数据的最外层容器。Cassandra 中 Keyspace 的基本属性有:
复制因子 - 它是在集群中将接收相同数据副本的机器数量。
副本放置策略 - 它就是放置副本到环中的策略。我们有诸如简单策略(机架感知策略)、旧网络拓扑策略(机架感知策略)和网络拓扑策略(数据中心共享策略)等策略。
列族 - Keyspace 是一个或多个列族的容器。列族反过来是行集合的容器。每一行都包含有序的列。列族表示数据的结构。每个 Keyspace 至少有一个,通常有多个列族。
创建 Keyspace 的语法如下:
CREATE KEYSPACE Keyspace name WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
下图显示了 Keyspace 的示意图。
列族
列族是有序行集合的容器。每一行反过来是有序列的集合。下表列出了将列族与关系数据库的表区分开来的要点。
关系表 | Cassandra 列族 |
---|---|
关系模型中的模式是固定的。一旦我们为表定义了某些列,在插入数据时,每一行都必须至少用空值填充所有列。 | 在 Cassandra 中,尽管定义了列族,但列却没有。您可以随时自由地向任何列族添加任何列。 |
关系表仅定义列,用户使用值填充表。 | 在 Cassandra 中,表包含列,或者可以定义为超级列族。 |
Cassandra 列族具有以下属性:
keys_cached - 它表示每个 SSTable 要缓存的位置数量。
rows_cached - 它表示其整个内容将缓存到内存中的行数。
preload_row_cache - 它指定是否要预填充行缓存。
注意 - 与关系表(列族的模式不固定)不同,Cassandra 不会强制单个行具有所有列。
下图显示了 Cassandra 列族的示例。
列
列是 Cassandra 的基本数据结构,具有三个值,即键或列名、值和时间戳。以下是列的结构。
超级列
超级列是一种特殊的列,因此它也是键值对。但是超级列存储子列的映射。
通常列族存储在磁盘上的各个文件中。因此,为了优化性能,将您可能一起查询的列保存在同一个列族中非常重要,而超级列在这里可以提供帮助。以下是超级列的结构。
Cassandra 和 RDBMS 的数据模型
下表列出了将 Cassandra 的数据模型与 RDBMS 的数据模型区分开来的要点。
RDBMS | Cassandra |
---|---|
RDBMS 处理结构化数据。 | Cassandra 处理非结构化数据。 |
它具有固定模式。 | Cassandra 具有灵活的模式。 |
在 RDBMS 中,表是数组的数组。(行 x 列) | 在 Cassandra 中,表是“嵌套键值对”的列表。(行 x 列键 x 列值) |
数据库是最外层容器,包含与应用程序对应的数据。 | Keyspace 是最外层容器,包含与应用程序对应的数据。 |
表是数据库的实体。 | 表或列族是 Keyspace 的实体。 |
行是 RDBMS 中的单个记录。 | 行是 Cassandra 中的复制单元。 |
列表示关系的属性。 | 列是 Cassandra 中的存储单元。 |
RDBMS 支持外键、连接的概念。 | 关系使用集合表示。 |