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)。它最初是由 ...