Cassandra IN子句限制

时间:2015-01-20 15:53:12

标签: cassandra cqlsh database nosql

我有一张这样的桌子:

CREATE TABLE peoples(
    user_id int,
    people_id text,
    email text,
    PRIMARY KEY ((user_id), people_id)
);

当我需要导入新人来检查人群而不是单独检查每一行时,这是一种好习惯吗?

这样的事情:

SELECT * FROM peoples WHERE user_id = 1 and people_id IN ('7651-ABCD', '9874-UHAG');

从服务器端我将检查它是否存在,而不是像这样查询每个人:

SELECT * FROM peoples WHERE user_id = 1 and people_id = '7651-ABCD';

我需要导入大约30-50万人,并且必须知道用户是否存在,我必须在写之前先阅读。

对IN有限制吗? IN的好习惯是多少?

我正在使用二进制协议,所以我更喜欢每次使用IN进行选择请求。

谢谢!

1 个答案:

答案 0 :(得分:4)

要直接回答您的问题,那么通常会执行许多小查询而不是大型查询(例如,具有大量ID的IN),因为它会更均匀地分散群集周围的负载。但是根据你的群集大小等,我只是让它可配置并测试它。

但是,您可能希望非规范化以适合此查询。例如,您还可以拥有一个由人员ID键入的表格,该表格可以为您提供与之关联的用户,因此对于您导入的每个人,您可以直接查看哪些用户受到影响。基于查询的建模是正常的方式。