首页 > 解决方案 > 如何避免分区键过大

问题描述

分区大小不应大于 10 MB(推荐)。我怎样才能避免这种情况?

我可以使用 2 个分区键,但我无法查询它们,它不适合我的查询。

如果您有 2 个分区键,并且执行查询,则必须像这样调用两个分区键:

user_id = partition key
post_id = partition key

SELECT * FROM posts WHERE user_id = 1 AND post_id = 1;

如果你使用它,你会得到一个错误,因为你没有调用 post_id

SELECT * FROM posts WHERE user_id = 1;

但是我的查询中不需要 post_id 或 user_id 我只需要其中一个,而不是两者都需要。那么我现在如何避免分区大小?

标签: cassandra

解决方案


你可以有如下的表格设计 -

CREATE TABLE user_post_by_month (
userid int,
year int,
month int,
postid int, 
post text,
PRIMARY KEY ((userid,year,month),postid);

这种设计不会产生宽行。您可以按用户获取特定月份的帖子。如果您预计一个月内用户的帖子过多,您可以添加另一个存储桶,例如一周。

CREATE TABLE user_post_by_week (
userid int,
year int,
month int,
week int,
postid int, 
post text,
PRIMARY KEY ((userid,year,month,week),postid);

推荐阅读