【发布时间】:2023-01-31 17:28:03
【问题描述】:
我正在使用 ScyllaDb,但我认为这也适用于 Cassandra,因为 ScyllaDb 与 Cassandra 兼容。
我有下表(我有 ~5 个这种表):
create table batch_job_conversation (
conversation_id uuid,
primary key (conversation_id)
);
批处理作业使用它来确保某些字段保持同步。在应用程序中,可能会发生大量并发写入/读取。偶尔,我会通过批处理作业更正这些值。
同一行可能会发生很多写入,因此它会覆盖这些行。批处理作业当前使用此查询获取行:
select * from batch_job_conversation
然后批处理作业将读取此时的数据并确保一切同步。我认为这个查询不好,因为它强调了所有分区和节点协调器,因为它需要访问所有分区。
我的问题是这种表有固定字段是否更好?像这样:
创建表 batch_job_conversation ( always_zero 整数, conversation_id uuid, 主键 ((always_zero), conversation_id) );
而不是查询将是这样的:
select * from batch_job_conversation where always_zero = 0
对于每个批处理作业,我可以使用不同的分区键。这些表中的行数将大致相同(最多几千行)。这些表可能会多次覆盖同一行。
有一个固定值更好吗?还有另一种方法来处理这个吗?我没有可以使用的逻辑分区键。
【问题讨论】: