Cassandra UUID分区键和分区大小

时间:2018-06-12 05:55:39

标签: cassandra primary-key partition

给出一个表

CREATE TABLE sensors_by_id (
    id uuid,
    time timeuuid,
    some_text text,
    PRIMARY KEY (id, time)
) 

当有大量条目时,这会扩大吗?我不确定,如果一个UUID字段足以作为一个好的分区键,还是需要创建一些像week_first_day或类似的人工密钥?

2 个答案:

答案 0 :(得分:1)

这实际上取决于你将如何插入数据 - 如果你为每个插入真的随机生成UUID,那么重复is very low的可能性,你会得到所谓的“瘦行”(a很多分区里面有1行)。即使你开始获得重复项,每行也不会有这么多......

答案 1 :(得分:0)

分区大小可能是一个问题,因为cassandra限制了每个分区的磁盘大小。

好的经验法则是将最大行数保持在 100,000个项目以下,并且将磁盘大小控制在100 MB以下

使用该公式enter image description here

很容易计算分区大小

您可以阅读有关数据建模here的更多信息。

因此,在当前情况下, 1 000 000 行的计数每个分区 some_text的平均大小为 100 个字节列为:

Number of Values: (1000000 * (3 - 2 - 0) + 0) = 1000000

Partition Size on Disk: (16 + 0 + (1000000 * 116) + (8 * 1000000))
= 124000016 bytes (118.26 Mb)

因此您可以看到每个分区 118.26 Mb 超出了限制。因此,您需要优化分区键。

我使用开放源代码项目cql-calculator对它进行了计算。