如何避免分区键过大
How can I avoid a partition key from a too large size
分区大小不应大于 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 我总是只需要其中之一,而不是两者都需要。那么我现在如何避免分区大小?
您可以table设计如下 -
CREATE TABLE user_post_by_month (
userid int,
year int,
month int,
postid int,
post text,
PRIMARY KEY ((userid,year,month),postid);
此设计不会创建宽行。您可以按用户获取特定月份的 post。如果您预计一个月内某个用户的次数过多 post,您可以添加另一个存储桶,例如一周。
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);
分区大小不应大于 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 我总是只需要其中之一,而不是两者都需要。那么我现在如何避免分区大小?
您可以table设计如下 -
CREATE TABLE user_post_by_month (
userid int,
year int,
month int,
postid int,
post text,
PRIMARY KEY ((userid,year,month),postid);
此设计不会创建宽行。您可以按用户获取特定月份的 post。如果您预计一个月内某个用户的次数过多 post,您可以添加另一个存储桶,例如一周。
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);