在Cassandra中建模唯一约束

Adv*_*dit 4 cassandra

我是Cassandra的新手.我想知道如何在Cassandra中建模一个独特的约束场景.

例如,我有一个用户表,其中包含用户名,电子邮件,名字列.由于不允许2个用户拥有相同的用户名,也不允许他们拥有相同的电子邮件ID,我该如何对此进行建模?

在传统的RDMS术语中,我会在每个列上创建唯一键.

谢谢

Ste*_*ski 5

您必须使用值作为主键为用户名和电子邮件创建一个附加表.请记住,主键始终是唯一的.


Car*_*ini 5

您创建由用户和电子邮件组成的主键

CREATE TABLE users (
  username text,
  email text,
  age int,
  someotherdata text,
  PRIMARY KEY ((username, email))
)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以说用户名和电子邮件都会识别出1个用户名.这有点" 令人沮丧 ",因为您只能通过知道用户名来获取用户信息,您需要知道用户名和电子邮件

另一种解决方案可能是使用聚类键,静态列和二级索引

CREATE TABLE users (
  username text,
  email text,
  age int static,
  someotherdata text static,
  PRIMARY KEY (username, email)
)

CREATE INDEX ON users (email);
Run Code Online (Sandbox Code Playgroud)

第二种解决方案允许以下内容

1 - 用户可以关联更多电子邮件
2 - 电子邮件中的二级索引允许您在写入之前检查邮件是否已被其他人使用
3 - 您只需知道其用户名或电子邮件即可获取用户信息

使用静态列,您只有一个年龄/某个数据/用户的任何内容.

注意主键上的括号,例如我说分区键是由用户名和电子邮件制作的,在示例二中我说分区键是用户名,而群集键是电子邮件.

HTH,卡罗