用于批量分析的唯一分区键或分组分区键

时间:2018-01-31 17:09:44

标签: sql cassandra data-modeling

我希望在一段时间内看到每个用户的每个值。

我的主键应该是(user_id, timestamp),以便我点击每个节点并让群集密钥窗口关闭。

或者我的主键应该是(day_of_year, timestamp),以便我的分区键找到节点的子集,并且我使用时间戳群集键来实现对时间段的更精细控制。

2 个答案:

答案 0 :(得分:1)

您需要估算(day_of_year, timestamp)创建的分区所具有的数据。如果分区大小超过100 MB,那么将来可能会在修复过程中给您带来问题。因此,如果您有超过100 MB的分区风险,那么您应该去(user_id, timestamp)。它还将在整个节点上分配工作量,而不是只集中在一个节点上。

要了解分区大小,您可以运行nodetool cfstats。在输出中,检查Compacted partition maximum bytes的值。它不能保证成为最大的分区,但它会告诉您在运行命令的节点上压缩的最大分区大小。

答案 1 :(得分:-1)

使用timestamp作为分区键,使用user_id作为群集键。查询时间戳如下:

SELECT * from table where token(timestamp)>=token('data');

如果要查询时间戳和用户ID,请将user_id添加为分区键。