在Cassandra中建模唯一约束

时间:2015-02-12 12:41:09

标签: cassandra

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

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

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

由于

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

您创建由用户和电子邮件

组成的主键
CREATE TABLE users (
  username text,
  email text,
  age int,
  someotherdata text,
  PRIMARY KEY ((username, email))
)

通过这种方式,您会说用户名和电子邮件始终会识别出1个用户名。这是一个“令人沮丧的”,因为您只能通过知道用户名来获取用户信息,您需要知道用户名和电子邮件

另一种解决方案可能是使用群集密钥,静态列和辅助索引

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

CREATE INDEX ON users (email);

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

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

即可获取用户信息

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

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

HTH, 卡罗