Cassandra 中的数据模型与 RDBMS 中正常情况完全不同。我们来看看 Cassandra 如何存储数据。
群集
Cassandra 数据库分布在运行的几(多)台机器上。最外层的容器被称为包含不同节点的群集。每个节点都包含一个副本,如果发生故障,副本将负责顶上。Cassandra 将节点以环形格式排列在群集中,并为其分配数据。
键空间
键空间(Keyspace)是 Cassandra 中数据的最外层容器。以下是 Cassandra 中 Keyspace 的基本属性:
- 复制因子:它指定集群中的机器数量,将接收相同数据的副本。
复制放置策略:这是一个策略,如何数据将复制品放在环中。有三种类型的策略,如:
- 简单策略(机架感知策略)
- 旧网络拓扑策略(机架感知策略)
- 网络拓扑策略(数据中心共享策略)
列家族:列家族置于键空间之下。键空间是一个或多个列族的列表的容器,而列族是一组行的容器。每行包含已排序的列。列家族表示数据的结构。每个键空间至少有一个并且经常有很多列家族。
在 Cassandra 中,良好的数据模型非常重要,因为不良数据模型可能会降低性能,特别是当您尝试在 Cassandra 上实现 RDBMS 概念时。
Cassandra 数据模型规则
- Cassandra 不支持 JOINS,GROUP BY,OR 子句,聚合等等。因此必须按照需要存储数据的方式存储数据。
- 最大化数据重复,因为 Cassandra 是分布式数据库,数据重复提供即时可用性而无单点故障。
数据建模目标
在 Cassandra 中建模数据时,您应该有以下目标:
- 在群集周围均匀传播数据:要在 Cassandra 群集的每个节点上传播相等数量的数据,您必须选择整数作为主键。数据根据作为主键的第一部分的分区键传播到不同的节点。
- 查询数据时读取的分区数最小化:分区用于将一组记录与相同的分区键绑定。当读取查询发出时,它从不同的分区收集不同节点的数据。
在许多分区的情况下,需要访问所有这些分区来收集查询数据。这并不意味着不应该创建分区。如果您的数据非常大,则无法在单个分区上保留大量数据。单个分区将会减慢。所以必须有一个平衡数量的分区。