Cassandra UUID 分区键和分区大小

Cassandra UUID partition key and partition size

给定一个 table

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

当有很多条目时,这个会缩放吗?我不确定,如果 UUID 字段足以作为一个好的分区键,或者是否需要创建一些人工键,如 week_first_day 或类似的东西?

这实际上取决于您将如何插入数据 - 如果您为每次插入真正随机生成 UUID,那么重复的机会 is very low,您将得到所谓的 "skinny rows"(很多分区里面有 1 行)。即使开始重复,每一行也不会那么多...

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

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

使用该公式很容易计算分区大小

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

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

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