Cassandra IN子句在一个分区

问题描述:

我搜索了一下,发现在Cassandra中有一个IN子句被认为不太合乎需要,因为性能方面的考虑。Cassandra IN子句在一个分区

如果我有一个像

create table Genre (
    genre_id bigint, 
    movie_id bigint, 
    primary key (genre_id, movie_id) 
); 

一个表,并写出这样

select * from Genre where genre_id = 1 and movie_id IN (1, 2, 3); 

查询这仍然被认为是坏?我的感觉是,因为我使用的是单个分区(genre_id),所以IN子句不应该被认为是性能不好的。因为你知道哪个节点具有数据卡珊德拉,所以卡桑德拉只需要在该节点上查询,并与您的条款过滤

IN查询单一分区被认为是好的

尽量保持in子句小,因为您的所有筛选将位于单个节点中,并且协调器节点将等待完整结果,可能会导致超时。

在我看来,这取决于...一般来说,只要你保持你的名单短(例如10个元素),你是安全的。

添加更多的元素总是会产生查询执行时间的增量,最终会超时,并且协调器上的压力会增加(它必须在发送给客户端之前存储所有结果)。

如果您在IN子句中使用单个值获取的典型记录足够大(例如,您获得了长BLOB),即使是两项IN子句查询也可能会导致您的性能下降。