我对Cassandra很陌生,我刚刚使用Datastax课程学习它,但是我在这里或在互联网上找不到足够的信息,在我的应用程序中我需要使用存储桶来分割我的数据。 / p>
我有一些工具可以进行相当多的测量,并且每天拆分测量(时间戳作为分区键)可能有点冒险,因为我们可以轻松达到分区的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添加为分区键,但后来我放松了"措施的流程"由一种文书制作,因为我感兴趣的是看到文书在特定日期或某段时间内所采取的所有措施。
非常感谢你的帮助!
答案 0 :(得分:1)
您应该专注于您的要求,然后返回到您的架构模型。在您的情况下,每种仪器每天可以做多少措施?如果每个人都可以做到少于你的400k措施,那么你已经完成了没有分组。如果您的仪器每个可以执行多达10M的测量,那么 N = 10M / 400k 桶应该足以满足您的要求。假设 N 存储桶,当您需要查询来自特定工具的所有度量时,您必须执行 N 查询,每个存储桶一个,除非您可以在此期间计算度量您的写入,以便您可以在存储桶已满时更换存储桶。我的意思是,你在桶0中写出第一个400k的测量值,然后你将第二个400k测量值写入桶1,依此类推。然后,您需要跟踪插入数据的 K 存储区的数量,并仅在 N 上执行 K 查询。这样你就可以获得不平衡的桶(和分区),但是你可以用最少量的查询得到结果。如果您更喜欢平衡桶方法,则可以使用均匀分布的随机存储桶编号执行每次写入,但是您必须执行所有 N 查询以获取特定工具的所有数据