Raf*_*Mor 3 database cassandra nosql cqlsh
我有一张这样的表:
CREATE TABLE peoples(
user_id int,
people_id text,
email text,
PRIMARY KEY ((user_id), people_id)
);
Run Code Online (Sandbox Code Playgroud)
当我需要导入新人来检查大量人而不是分别检查每一行时,这是一种很好的做法吗?
像这样的东西:
SELECT * FROM peoples WHERE user_id = 1 and people_id IN ('7651-ABCD', '9874-UHAG');
Run Code Online (Sandbox Code Playgroud)
从服务器端,我会检查它是否存在,而不是像这样查询每个人:
SELECT * FROM peoples WHERE user_id = 1 and people_id = '7651-ABCD';
Run Code Online (Sandbox Code Playgroud)
我需要导入大约 30-50 万人,并且必须知道用户是否存在这些人,我必须先读后写。
IN有什么限制吗?IN 的良好做法有多少?
我使用的是二进制协议,所以我更喜欢每次使用 IN 进行选择请求。
谢谢!
要直接回答您的问题,通常首选执行许多小查询而不是大查询(例如具有很多 ID 的 IN),因为它可以更均匀地分散集群周围的负载。但是根据您的集群大小等,我只会使其可配置并对其进行测试。
但是,您可能希望非规范化以适应此查询。例如,您还可以有一个以人员 ID 为键的表,该表为您提供与他们关联的用户,因此对于您导入的每个人,您可以直接查看哪些用户受到影响。基于查询的建模是正常的方法。