简介
Cassandra 是一个来自 Apache 的分布式数据库,具有高度可扩展性,可用于管理大量的结构化数据。它提供了高可用性,没有单点故障。
架构
Cassandra的设计目的是处理跨多个节点的大数据工作负载,而没有任何单点故障。Cassandra在其节点之间具有对等分布式系统,并且数据分布在集群中的所有节点之间。
- 集群中的所有节点都扮演相同的角色。 每个节点是独立的,并且同时互连到其他节点。
- 集群中的每个节点都可以接受读取和写入请求,无论数据实际位于集群中的何处。
- 当节点关闭时,可以从网络中的其他节点提供读/写请求。
组件
- 节点 – 它是存储数据的地方。
- 数据中心 – 它是相关节点的集合。
- 集群 – 集群是包含一个或多个数据中心的组件。
- 提交日志 – 提交日志是Cassandra中的崩溃恢复机制。每个写操作都写入提交日志。
- Mem-表 – mem-表是存储器驻留的数据结构。提交日志后,数据将被写入mem表。有时,对于单列族,将有多个mem表。
- SSTable – 它是一个磁盘文件,当其内容达到阈值时,数据从mem表中刷新。
- 布隆过滤器 – 这些只是快速,非确定性的算法,用于测试元素是否是集合的成员。它是一种特殊的缓存。 每次查询后访问Bloom过滤器。
数据模型
集群(Cluster)
Cassandra 数据库分布在几个一起操作的机器上。最外层容器被称为群集。对于故障处理,每个节点包含一个副本,如果发生故障,副本将复制。Cassandra 按照环形格式将节点排列在集群中,并为它们分配数据。
键空间 (Keyspace)
键空间是 Cassandra 中数据的最外层容器。Cassandra 中的一个键空间的基本属性是 –
- 复制因子 – 它是集群中将接收相同数据副本的计算机数。
- 副本放置策略 – 它只是把副本放在介质中的策略。我们有简单策略(机架感知策略),旧网络拓扑策略(机架感知策略)和网络拓扑策略(数据中心共享策略)等策略。
- 列族 – 键空间是一个或多个列族的列表的容器。列族又是一个行集合的容器。每行包含有序列。列族表示数据的结构。每个键空间至少有一个,通常是许多列族。
创建键空间的语法如下 –
CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
下图显示了键空间的示意图。

列族
列族是有序收集行的容器。每一行又是一个有序的列集合。下表列出了区分列系列和关系数据库表的要点。
关系表 | 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 中,表是一个数组的数组。 (ROW x COLUMN) | 在 Cassandra 中,表是“嵌套的键值对”的列表。 (ROW x COLUMN 键 x COLUMN 值) |
数据库是包含与应用程序对应的数据的最外层容器。 | Keyspace 是包含与应用程序对应的数据的最外层容器。 |
表是数据库的实体。 | 表或列族是键空间的实体。 |
Row 是 RDBMS 中的单个记录。 | Row 是 Cassandra 中的一个复制单元。 |
列表示关系的属性。 | Column 是 Cassandra 中的存储单元。 |
RDBMS 支持外键的概念,连接。 | 关系是使用集合表示。 |
相关文章
相关导航
暂无评论...