Cassandra 数据模型

2024 年 8 月 29 日 | 阅读 3 分钟

Cassandra 中的数据模型与我们在 RDBMS 中通常看到的不同。 让我们看看 Cassandra 如何存储其数据。


集群 (Cluster)

Cassandra 数据库分布在几台协同运行的机器上。 最外层的容器被称为集群,其中包含不同的节点。 每个节点都包含一个副本,如果发生故障,该副本将负责。 Cassandra 以环形格式排列集群中的节点,并将数据分配给它们。


键空间

键空间是 Cassandra 中数据的最外层容器。 以下是 Cassandra 中键空间的基本属性

  • 复制因子: 它指定集群中将接收相同数据副本的机器数量。
  • 副本放置策略: 这是一种指定如何在环中放置副本的策略。 策略有三种,例如

1) 简单策略(机架感知策略)

2) 旧的网络拓扑策略(机架感知策略)

3) 网络拓扑策略(数据中心共享策略)

  • 列族: 列族放置在键空间下。 键空间是一个或多个列族的容器,而列族是行的集合的容器。 每行包含有序的列。 列族表示您的数据结构。 每个键空间至少有一个,通常有许多列族。

在 Cassandra 中,一个好的数据模型非常重要,因为一个糟糕的数据模型会降低性能,尤其是在您尝试在 Cassandra 上实现 RDBMS 概念时。


Cassandra 数据模型规则

  • Cassandra 不支持 JOIN、GROUP BY、OR 子句、聚合等。 因此,您必须以您希望检索的方式存储数据。
  • Cassandra 针对高写入性能进行了优化,因此您应该最大限度地提高写入量以获得更好的读取性能和数据可用性。 数据写入和数据读取之间存在权衡。 因此,通过最大限度地提高数据写入次数来优化您的数据读取性能。
  • 最大化数据重复,因为 Cassandra 是一个分布式数据库,数据重复提供即时可用性,而没有单点故障。

  • 数据建模目标

    您在 Cassandra 中建模数据时应具有以下目标

    • 在集群中均匀分布数据: 要在 Cassandra 集群的每个节点上分布等量的数据,您必须选择整数作为主键。 数据根据作为主键第一部分的 分区键 分布到不同的节点。
    • 最大限度地减少查询数据时读取的分区数量: 分区用于将一组具有相同分区键的记录绑定在一起。 发出读取查询时,它从不同分区中的不同节点收集数据。

    如果分区很多,则需要访问所有这些分区以收集查询数据。 这并不意味着不应该创建分区。 如果您的数据量很大,您无法将大量数据保存在单个分区上。 单个分区将变慢。 因此您必须拥有平衡的分区数量。


    下一主题Cassandra vs hbase