【发布时间】:2021-10-17 08:01:27
【问题描述】:
对于消息传递应用程序,我的数据库结构相对于:
CREATE TABLE users(
userid text,
name text,
rooms list<text>
...
PRIMARY KEY (userid)
);
CREATE TABLE rooms(
roomid text,
members list<text>,
createdat bigint,
lastmessage bigint,
...
PRIMARY KEY (roomid, createdat)
);
CREATE TABLE messages(
roomid text,
bucket int,
messageid bigint,
authorid text,
...
PRIMARY KEY ((hash, roomid), messageid)
);
客户端在启动时为给定用户请求所有房间。首先,我使用以下命令查询给定用户的所有 roomid:
SELECT rooms FROM users WHERE userId = 1234
然后我使用 IN 子句收集所有房间
SELECT * FROM rooms WHERE roomid IN ('room_1', 'room_2', ......);
并将实体返回给客户端。
我研究过,IN 子句可能导致一个节点承受很大压力。我希望用户拥有多达 100 个房间。
我必须将请求拆分为单个查询还是它们的另一种方式类似于更改数据模型?
为什么IN子句会导致单节点压力?
提前致谢!
【问题讨论】:
标签: cassandra cql cassandra-3.0 cql3