Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra中唯一约束的建模_Cassandra - Fatal编程技术网

Cassandra中唯一约束的建模

Cassandra中唯一约束的建模,cassandra,Cassandra,我是卡桑德拉的新手。我想知道如何在Cassandra中建模一个独特的约束场景 例如,我有一个users表,其中包含username、email和First Name列。 既然不应该允许任何两个用户拥有相同的用户名,也不应该允许他们拥有相同的电子邮件id,我该如何建模 在传统的RDMS术语中,我会在每个列上创建唯一的键 谢谢您必须为用户名和电子邮件创建一个附加表,并使用该值作为主键。请记住,主键始终是唯一的 创建一个由用户和电子邮件组成的主键 CREATE TABLE users ( user

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

例如,我有一个users表,其中包含username、email和First Name列。 既然不应该允许任何两个用户拥有相同的用户名,也不应该允许他们拥有相同的电子邮件id,我该如何建模

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


谢谢

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

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

CREATE TABLE users (
  username text,
  email text,
  age int,
  someotherdata text,
  PRIMARY KEY ((username, email))
)
通过这种方式,您可以说将始终有一个由用户名和电子邮件标识的用户名。这有点“令人沮丧”,因为你不能只知道用户名就获得用户信息,你需要知道用户名和电子邮件

CREATE TABLE users (
  username text,
  email text,
  age int,
  someotherdata text,
  PRIMARY KEY ((username, email))
)
另一个解决方案是使用集群键、静态列和辅助索引

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-您只需知道其用户名或电子邮件即可获得用户信息

使用静态列,用户只需使用一个age/someotherdata/whatever

注意主键上的括号,在我说的示例一中 分区键是由用户名和电子邮件组成的,在示例2中,我说分区键是用户名,集群键是电子邮件

嗯,,
Carlo

我们可以只查询集群列而不使用分区键吗?也许只有允许筛选?它是对基数低或高的字段使用索引。电子邮件应该是唯一的——这是非常重要的。(我是卡桑德拉的新手,可能很笨):这两种解决方案不是都只说用户名+电子邮件的配对是唯一的,但用户名和电子邮件都不必是唯一的吗?例如,这些键可以同时存在:(john1,john@john.com),(john1,mary@mary.com),(mary1,john@john.com)? 我把最初的问题解释为我们如何确保两者的独特性。i、 例如,一旦插入我提到的第一个密钥,以下两项都无效,因为它们使用的用户名或电子邮件与第一个相同。