Cassandra 数据模型
Cassandra中的数据模型与通常在RDBMS中看到的完全不同。让我们看看Cassandra如何存储其数据。
集群
Cassandra数据库分布在一起操作的多台计算机上。最外面的容器称为群集,其中包含不同的节点。每个节点都包含一个副本,如果发生故障,则由副本负责。 Cassandra以环形格式将节点排列在群集中,并为其分配数据。
键空间
键空间是Cassandra中数据的最外层容器。以下是Cassandra中Keyspace的基本属性:
- 复制因子: : 它指定群集中将接收相同数据副本的计算机的数量。
- 复制品放置策略: 这是一种选择如何在环中放置复制品的策略。共有三种策略,例如:
1)简单策略(机架感知策略)
2)旧网络拓扑策略(机架感知策略)
3)网络拓扑策略(数据中心)共享策略)
- 列族: 列族位于键空间下。键空间是一个或多个列族列表的容器,而列族是行集合的容器。每行包含有序的列。列族代表数据的结构。每个键空间至少有一个列族,并且经常有许多列族。
在Cassandra中,良好的数据模型非常重要,因为不良的数据模型会降低性能,尤其是当您尝试在Cassandra上实现RDBMS概念时。
Cassandra数据模型规则
- Cassandra不支持JOINS,GROUP BY,OR子句,聚合等。因此,您必须以应有的方式存储数据
- Cassandra已针对高写入性能进行了优化,因此您应该最大限度地提高写入量,以获得更好的读取性能和数据可用性。在数据写入和数据读取之间需要权衡。因此,通过最大化数据写入次数来优化数据读取性能。
- 最大化数据重复,因为Cassandra是分布式数据库,并且数据重复提供了即时可用性而没有单点故障。
数据建模目标
在Cassandra中对数据建模时,应该有以下目标:
- 在群集中均匀分布数据: 要在Cassandra群集的每个节点上均匀分布数据量,必须选择整数作为主键。数据基于作为主键第一部分的分区键传播到不同的节点。
- 最小化查询数据时读取的分区数: 分区用于绑定具有相同分区键的一组记录。发出读取查询时,它将从不同分区的不同节点收集数据。
对于许多分区,需要访问所有这些分区以收集查询数据。这并不意味着不应创建分区。如果您的数据非常大,则无法将大量数据保留在单个分区上。单个分区将变慢。因此,您必须具有均衡数量的分区。
Cassandra与HBase: 下表指定了Cassandra与HBase之间的主要区别:HBaseCassandraHBase基于Bigtable(Google)Cassandra基于DynamoDB(Amazon)。它最初是由 ...