Scylla/Cassandra表分区密钥的数据模型事先未知->静态字段?

flseospp  于 2023-02-04  发布在  Cassandra
关注(0)|答案(1)|浏览(151)

我正在使用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(总是零整数,会话标识uuid,主键((总是零),会话标识));
那么查询将是这样的:

select * from batch_job_conversation where always_zero = 0

对于每个批处理作业,我可以使用不同的分区键。这些表中的行数大小大致相同(最多几千行)。这些表可能会多次覆盖同一行。
有一个固定的值更好吗?有没有其他的方法来处理这个问题?我没有可以使用的逻辑分区键。

9wbgstp7

9wbgstp71#

第二个模型将创建一个大分区,相信我,你不会想要这样的;- )(你会在大分区的上面做分区扫描,这比原来的完全扫描更糟糕)(还有另一个建议-保持你的分区很小,有很多分区,那么你所有的CPU都会被平等地使用)
第一种方法是可以的--称为“完全扫描”,但您需要正确管理它,有几种方法,我们在https://www.scylladb.com/2017/02/13/efficient-full-table-scans-with-scylla-1-6/中对此进行了博客,基本上可以归结为分治
还应注意spark也执行全扫描
第h行

相关问题