Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/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
Database design 在Cassandra中设计/使用用户表并创建帐户_Database Design_Cassandra - Fatal编程技术网

Database design 在Cassandra中设计/使用用户表并创建帐户

Database design 在Cassandra中设计/使用用户表并创建帐户,database-design,cassandra,Database Design,Cassandra,我是Cassandra的新手,我从设计一个用于帐户注册和登录的简单用户表开始。这很简单: 行键:用户名;列:电子邮件、姓名、密码、盐。 或者: 行键:uuid;列:用户名、电子邮件、姓名、密码、salt 关于这个简单的结构,我有两个问题: 我需要一个电子邮件(和用户名)查找索引。我可以使用辅助索引或手动创建索引。由于电子邮件/用户名列的基数很高,我应该选择第二个选项吗?显然,二级索引是用于低基数列的 更重要的是,我立即遇到了同时向表中插入键的问题——我需要在写入之前进行读取,以确保用户名(或电子

我是Cassandra的新手,我从设计一个用于帐户注册和登录的简单用户表开始。这很简单:

行键:用户名;列:电子邮件、姓名、密码、盐。
或者:
行键:uuid;列:用户名、电子邮件、姓名、密码、salt

关于这个简单的结构,我有两个问题:

  • 我需要一个电子邮件(和用户名)查找索引。我可以使用辅助索引或手动创建索引。由于电子邮件/用户名列的基数很高,我应该选择第二个选项吗?显然,二级索引是用于低基数列的
  • 更重要的是,我立即遇到了同时向表中插入键的问题——我需要在写入之前进行读取,以确保用户名(或电子邮件)不在数据库中。是否有办法避免潜在的竞争条件(例如,两个用户同时注册相同的用户名/电子邮件)?或者,正确的解决方案是使用额外的关系数据库来处理用户注册,并将用户帐户详细信息复制到cassandra数据库以用于登录和其他目的
  • 是的,您需要根据您陈述的原因创建自己的索引。电子邮件和用户名是唯一的,因此不适合作为二级索引

  • 在任何需要唯一值的情况下,您都必须在写入之前读取。由于两个用户同时选择同一用户名的情况可能很少见(取决于您的流量),因此您可以交叉手指,希望它能起作用。或者,您可以遵循以下流程:

    • 执行读取以检查用户是否存在
    • 如果它不存在,写下记录并保留您使用的时间戳
    • 再次读取用户并比较时间戳
    • 如果时间戳不正确(意味着遵循相同流的其他人重写了第一条记录),则提示用户提供不同的名称
  • #2中的流将产生这样的效果,即在时间窗口内写入相同用户名的第二个用户将获胜,但我认为这是可以的,只要您告诉至少一个用户该名称已被使用