这是表格数据
video_id uuid
user_id timeuuid
added_year int
added_date timestamp
title text
description text
我想基于以下查询构建表
select * from video_by_year where added_year<2013;
创建表videos_by_year(
video_id uuid
user_id timeuuid
added_year int
added_date timestamp
title text
description text
PRIMARY KEY ((added_year) added_year)
);
注意:我使用added_year
作为主键和群集键,我认为这是不正确的。
答案 0 :(得分:1)
因此cassandra中数据建模的一个问题是第一个组件 - 分区键 - 必须使用“=”。如果你意识到cassandra正在做什么,它的原因很明显 - 它使用该值,哈希(md5或murmur3),并使用它来确定集群中哪些服务器拥有该分区。
因此,您不能使用不等式 - 它需要扫描群集中的每一行。
如果您需要在2013年之前添加视频,请考虑使用日期的某些部分作为分区键的系统,然后从每个日期“桶”中选择SELECT,您可以异步并行地执行这些操作。例如:
create table videos_by_year (
video_id uuid
user_id timeuuid
added_date_bucket text
added_date timestamp
title text
description text
PRIMARY KEY ((added_date_bucket), added_date, video_id)
) ;
我将文本用于added_date_bucket,因此您可以使用“YYYY”或“YYYY-MM”或类似内容。请注意,根据您向系统添加视频的速度,您甚至可能需要“YYYY-MM-DD”或“YYYY-MM-DD-HH:ii:ss”,因为您将达到一些实际限制每桶百万个视频。
你可以聪明一点,让video_id成为timeuuid,然后你就可以在一列中添加add_date和video_id。