Cassandra where IN 子句限制

标签 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 的良好做法是多少?

我使用的是二进制协议(protocol),所以我更喜欢每次使用 IN 进行选择请求。

谢谢!

最佳答案

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

然而,您可能想要反规范化以适应此查询。例如,您还可以有一个由 people id 键控的表,为您提供与他们关联的用户,因此对于您要导入的每个人,您可以直接看到哪些用户受到影响。基于查询的建模是正常的方式。

关于Cassandra where IN 子句限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28049641/

相关文章:

python - 如何从 python cassandra 驱动程序传递 cassandra 函数?

mysql - 数十亿行 mysql 表/cassandra 模型-(以及一些生物学知识 :))

xml - 尽可能快地处理 40M 的文档(和索引)

cassandra - 如何从 Cassandra 获取一系列数据

python - 如何使用 cqlengine 在 cassandra 中批量/批量插入?

php表单问题如果图像输入为空则不会插入数据

database - 代理与自然/业务 key

java - 如何在 cassandra 中为 list<varchar> <-> java.util.List 匹配编解码器

java - Spring boot [s0] 连接到节点时出错(endPoint=127.0.0.1 :9042, hostId=null,>

java - cassandra 中的嵌套查询