繁体   English   中英

Cassandra 表中的最大单元数

[英]Maximum Number of Cells in a Cassandra Table

我有一个系统可以存储来自具有许多传感器的机器的测量值,每秒一次。 我正在考虑使用 Cassandra 并希望将机器 state 测量的 1 秒样本存储在单个表中,类似于:

create table inst_samples (
    machine_id text,
    batch_id int,
    sample_time timestamp,
    var1 double,
    var2 double,
    .....
    varN double,
    PRIMARY KEY ((machine_id, batch_id), sample_time)
);

大约有 20 台机器,每台机器有 400 个 state 变量,batch_id 将每 1-2 小时更新一次。 我已经查看了关于每个表最多 20 亿个单元的文档,并在此处指出了类似的问题What is the maximum number of columns allowed in Cassandra and here Cassandra has a limit of 20 亿单元每个分区,但什么是分区?

如果我正确理解了这个限制,我会在大约 60 天内达到 inst_samples 表中单台机器的 20 亿个单元格限制吗?

(2e9 个单元格/400 列/行)/(3600 行/小时)/(24 小时/天)=~ 58 天?

我是一个总 Cassandra 新手。 谢谢。

这20亿的限制是分区的,如果你有好的数据model,你应该有很多分区。 在实践中,建议控制每个分区的单元数 - 例如,每个分区不要超过 100,000 个单元,否则可能会出现一些性能问题等。但实际限制取决于多种因素,例如 Cassandra 版本,什么执行查询等。

在您的情况下,我们有 machine_id + batch_id 的分区键,这为我们提供了 2 小时的批量大小:400x7200 = 2880000 - 近 300 万个单元。 它可能仍然有效(如果将批量大小设置为 1 小时会更好),但需要在真实硬件上进行测试 - 例如,可以使用NoSQLBench来完成。

还有其他方法可以优化您的数据 model - 例如,不要为每个变量分配单独的列,只需使用 freeze frozen<map<text, double>> - 在这种情况下,所有测量值都将存储为单个单元格。 它的缺点 - 如果不读取 map 并插入更改值,则无法更改单个值。 另一个缺点是您需要一次读取所有测量值 - 但这可能没问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM