如何在 Cassandra 中通过唯一 ID 处理搜索

how to handle search by unique id in Cassandra

我有一个带有复合主键的 table。 名称、描述、ID

PRIMARY KEY (id, name, description)

每当搜索 Cassandra 时,我都需要提供三个密钥,但现在我有一个用例,我想删除、更新和仅基于 ID 获取。

因此,我针对此 table 创建了一个物化视图,并重新排序键,使其优先具有 ID,这样我就可以仅根据 ID 进行搜索。

但是我如何删除或更新只有一个 ID 的记录?

不清楚您使用的是具有 3 列的分区键,还是使用的是复合主键

如果您使用的 分区键 有 3 列:

CREATE TABLE tbl (
    id uuid,
    name text,
    description text,
    ...
    PRIMARY KEY ((id, name, description))
);

注意 double 括号,您需要所有 3 个组件来标识您的数据。因此,当您从物化视图中按 ID 查询数据时,您还需要检索 namedescription 字段,然后对每个元组 <id, name, description>.

发出一个删除

相反,如果您使用 复合 主键且 ID 是唯一的 PARTITION KEY:

CREATE TABLE tbl (
    id uuid,
    name text,
    description text,
    ...
    PRIMARY KEY (id, name, description)
);

注意 single 括号,然后你可以简单地发出一个删除,因为你已经知道分区并且不需要任何其他东西。

检查 this SO post 以获得关于 主键 类型的清晰解释。

您应该注意的另一件事是实体化视图会在后台为您填充 table,关于数据建模的相同 rules/ideas 也应该适用于实体化视图。