用于分区大小的 Cassandra 桶拆分

标签 cassandra time-series datastax partition bucket

我是 Cassandra 的新手,我刚刚通过 Datastax 类(class)学习了它,但是我在这里或在 Internet 上找不到足够的关于 bucket 的信息,在我的应用程序中我需要使用 buckets 来拆分我的数据。

我有一些工具可以进行很多测量,每天拆分测量(时间戳作为分区键)可能有点冒险,因为我们很容易达到分区 100MB 的限制。每个度量都涉及一个用 ID 标识的特定对象。所以我想用一个桶,但我不知道该怎么做。

我正在使用 Cassandra 3.7

我的表格大致如下所示:

CREATE TABLE measures (
  instrument_id bigint,
  day timestamp,
  bucket int,
  measure_timestamp timestamp,
  measure_id uuid,
  measure_info float,
  object_id bigint,
  PRIMARY KEY ((instrument_id, day, bucket), measure_timestamp, measure_id)
);

我想将 object_id 添加为分区键,但后来我放弃了仪器所做的“测量流”,因为我感兴趣的是查看仪器在特定日期或时间段内所做的所有测量.

  • 那么问题来了,当我想查询一个特定仪器一天的所有记录时,如果有很多桶,我该怎么办?
  • 如果我希望分区限制为 400 000 行,我如何知道在插入数据时必须将数据插入到哪个存储桶中?
  • 有没有办法知道桶的数量?

非常感谢您的帮助!

最佳答案

您应该专注于您的需求,然后再回到您的模式模型。在您的情况下,每台仪器每天可以进行多少次测量?如果每个人都可以做的少于您的 400k 措施,那么您已经完成了没有分桶的工作。如果您的仪器每台最多可以执行 10M 次测量,那么 N=10M/400k 桶应该足以满足您的要求。假设有 N 个桶,当您需要查询来自特定仪器的所有度量时,您必须执行 N 查询,每个桶一个,除非您可以计算期间的度量您的写入,以便您可以在桶满时更换桶。我的意思是,您将前 400k 度量写入存储桶 0,然后将第二个 400k 度量写入存储桶 1,依此类推。然后,您需要跟踪插入数据的 K 个桶,并仅执行 K 查询,而不是对 N 进行查询。这样你就有了不平衡的桶(和分区),但是你在最少数量的查询中得到了你的结果。如果您更喜欢平衡桶方法,则可以在均匀分布的随机桶号中执行每次写入,但是您必须执行所有 N 查询才能获取特定仪器的所有数据.

关于用于分区大小的 Cassandra 桶拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39446962/

相关文章:

string - R:变换不规则时间串

ubuntu - 安装 dse-full 后 Cassandra 没有出现

mysql - mysql和cassandra的区别

windows - Cassandra - "The system cannot find the file specified"

java - 用Java计算平均数

java - 从 Cassandra 读取 timeuuid 值 - 使用 DataStax 连接器

高 IOPS 运行 5 分钟后,Cassandra 抛出 NoHostAvailableException

cassandra - 在Cassandra中创建表和创建列族有什么区别?

java - 用java在cassandra中高频插入会丢失一些数据

python - 如何在 pandas 数据框中应用递归数字过滤器?