📜  在 Cassandra 中使用分区(1)

📅  最后修改于: 2023-12-03 15:37:18.781000             🧑  作者: Mango

在 Cassandra 中使用分区

Cassandra 中的分区是数据分散和分散负载的基本单位。分区键是用于将数据在节点之间分配的值。有效使用分区是确保 Cassandra 应用在扩展和高性能方面顺利工作的关键。

分区键的选择

选择分区键通常是决定应用程序能否在 Cassandra 中有效工作的最重要问题。您的分区键应该是查询的一部分,并且应该在必要时用于过滤数据。

在选择分区键时,请注意以下几点:

  • 数据分布:确保数据分布在所有节点上,以避免出现热区(hotspot)。
  • 查询的一部分:分区键必须是查询中使用的属性。而且分区键值的更改需要重新插入数据。
  • 包容性:分区键应该针对多个查询或业务需求保持一致。
  • 去中心化:避免集中式查询,因为它们可能导致性能瓶颈。

通常,您需要采用锦囊或对数据进行抽取,以确保正确选择分区键。

分区大小

数据分散和分散负载的原则表明,分区大小应该是平均的,并且应该成倍增加。Cassandra 曾经有一个 2 GB 的分区大小限制,但是从版本 3.0 开始,它已经被取消了。

当分区过大时,Cassandra 的读取性能会下降。建议一个分区不要超过 100 MB。当分区过小时,无法利用 Cassandra 的分布式优势。

分区键和复合分区键

Cassandra 支持复合分区键。这意味着您可以使用多个列作为分区键。这样,您不仅可以更好地控制数据分布,而且还可以更好地支持多查询/多数据库需求和查询层次结构。

要使用复合分区键,请将逗号分隔的列列表(例如“partitionKey1,partitionKey2”)传递给 CREATE TABLE 语句:

CREATE TABLE mytable (
  partitionKey1 text,
  partitionKey2 text,
  column1 text,
  column2 text,
  PRIMARY KEY ((partitionKey1, partitionKey2), column1)
);
分区和命中率

命中率是指成功从缓存中读取数据的比率。成功使用分区键是提高命中率的关键,这样可以最小化单个分区上的 I/O 操作。分区命中率是一种度量,它告诉您查询中使用的分区键是否有效。

要了解分区命中率,请使用 CQLSH 工具中的 nodetool cfhistograms 命令:

nodetool cfhistograms keyspace.table

此命令将详细说明分区的命中率统计信息。您可以使用前面提到的最佳实践来查看命中率,以确定是否需要更改分区键。

总结

分区是 Cassandra 中数据分散和分散负载的基本单位。在选择分区键时,请遵循一些最佳实践,例如选择正确的键、正确的大小和复合键。通过这些指南,您可以更好地控制数据分布,并提高 Cassandra 应用程序的查询性能。