gpt4 book ai didi

database - Cassandra 表中的最大单元格数

转载 作者:行者123 更新时间:2023-12-04 09:54:32 24 4
gpt4 key购买 nike

我有一个系统,每秒存储一次来自带有许多传感器的机器的测量值。我正在考虑使用 Cassandra 并希望将机器状态测量的 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 个状态变量,batch_id 将每 1-2 小时更新一次。我已经查看了每个表最多 20 亿个单元格的文档并注意到了类似的问题
这里 What are the maximum number of columns allowed in Cassandra和这里 Cassandra has a limit of 2 billion cells per partition, but what's a partition?

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

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

我是一个完全的 Cassandra 新手。谢谢。

最佳答案

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

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

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

关于database - Cassandra 表中的最大单元格数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61945676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com