cassandra 中如何处理非规范化

How is denormalization handled in cassandra

使用重复数据更新 table 的最佳方法是什么?

我有一个table

table users (
id text PRIMARY KEY,
email text,
description,
salary
)

我将对此 table 进行删除、更新、插入等操作。但我也有一个要求能够通过电子邮件和描述进行搜索。如果我使用电子邮件和描述的新复合键创建新的 table,

当我更新我的基地时table我会

insert into users (id, salary) values (1, 500);

我没有更新我的辅助 table 所需的数据,因为客户只有身份证和薪水。第二个 table 是如何更新的。

其他解决方法和缺点

  1. 我本可以创建实体化视图,但由于基础 table 只有一个主键,我只能再添加一列。我的搜索要求不止一栏。
  2. 在要搜索的列上创建二级索引。但是这样做的性能会很差,因为我要搜索的列具有很高的基数。即描述、电子邮件等

因此,"correct" 的方法是创建 3 个表。 salary_by_id、salary_by_email 和 salary_by_description。

table salary_by_id (
  id text PRIMARY KEY,
  salary int
)

table salary_by_email (
  email text PRIMARY KEY,
  salary int
)

table salary_by_description (
  description text,
  id int,
  salary int,
  primary key (description, id)
)

我将 id 添加到 salary_by_description 的原因是,根据我自己的猜测,描述不会是全局唯一的,因此它的主键中必须包含其他内容。

根据这些表的大小,最后一个可能需要在其分区键中添加一些额外的内容。如果需要,您可以将 id、电子邮件和描述添加到其他表中。

现在,当您需要插入或删除值时,请在所有 3 个表中执行此操作。如果您使用支持异步调用的驱动程序,例如 java,那么这不会花费太多额外费用。