实现表get all records在cassandra数据库中有多个标记

xytpbqjk  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(242)

在cassandra数据库中,我有视频和标签,每个视频可以有多个标签。
使用下面的结构,我可以得到视频有一个特定的标签:

CREATE TABLE VIDEOS_BY_TAG (
   tag text,
   video_id uuid,
   added_date timestamp,
   primary key ((tag), added_date, video_id)
) WITH CLUSTERING ORDER BY (added_date desc, video_id asc);

但是我怎么能让视频有多个特定的标签呢?例如,get视频有三个恐怖,浪漫和有趣的标签在Cassandra?

mbzjlibv

mbzjlibv1#

您可以简单地在查询中使用in子句。

SELECT *
FROM VIDEOS_BY_TAG
WHERE TAG IN ('HORROR', 'ROMANCE', 'FUNNY');

每个标记/子句可以命中不同的节点,但为特定标记返回的所有记录将来自单个节点。这是非常好的少量。请记住,您不希望使用包含50个标记的in子句的查询淹没系统,因为这可能会由于跨节点结果而导致一些争用。
如果这是代码,则更好的方法是简单地触发多个查询,每个标记一个查询,具体取决于执行的方式。这样会更好,因为每个协调器都可以从与所提供的标记相关的特定节点运行。v、 由于in子句,使单个协调器命中多个节点。
希望这是有道理的。

相关问题