【问题标题】:Datamodel for Scylla/Cassandra for table partition key is not known beforehand -> static field?表分区键的 Scylla/Cas​​sandra 数据模型事先未知 -> 静态字段?
【发布时间】: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

对于每个批处理作业,我可以使用不同的分区键。这些表中的行数将大致相同(最多几千行)。这些表可能会多次覆盖同一行。

有一个固定值更好吗?还有另一种方法来处理这个吗?我没有可以使用的逻辑分区键。

【问题讨论】:

    标签: cassandra scylla


    【解决方案1】:

    第二个模型会创建一个大分区,你不希望这样,相信我 ;-) (你会在大分区之上进行分区扫描,这比原来的全扫描更糟糕) (还有另一个建议 - 保持你的分区小并且有很多分区,然后你所有的 cpu 将被相当平等地使用)

    第一种方法是可以的——被称为全扫描,但是 你需要妥善管理它 有几种方法,我们在https://www.scylladb.com/2017/02/13/efficient-full-table-scans-with-scylla-1-6/上写了博客 基本上可以归结为分而治之

    另请注意,spark 也实现了全面扫描

    hth 大号

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多