cassandra数据库中的登录功能

时间:2017-07-03 19:22:36

标签: login cassandra primary-key

我有一个userId作为主键的用户表(列族),它还有其他详细信息,如emailId,密码,用户名等。

我怀疑当用户使用emailId登录时,如何在表中查找密码,因为我的主键是userId而不是emailId?

或者创建emailId是主键更好吗?

或用于将userId与emailId映射的附加表?

2 个答案:

答案 0 :(得分:1)

假设您的Cassandra版本支持Materialized View(3.x),这里可以轻松完成

假设您的原始表架构如下,其中userId是主键

create table userdetails_by_id 
(userId text primary key,
 emailId text,
 password text,
 username text);

创建一个物化视图,其中emailId将成为主键,并包含主表中的所有其他字段。这是它的定义

create materialized view userdetails_by_emailid
as select 
userId,
emailId,
password,
username
from userdetails_by_id 
where userId is not null and emailId is not null
primary key (emailId, userId);

现在,当查询针对userId时,您可以将其路由到主表,并且可以将针对emailId的查询路由到物化视图。这样Cassandra将保持数据同步,并且维护两个表不需要额外的应用程序代码。

答案 1 :(得分:0)

创建其他映射表(emailId到userId)需要您查询两个表。这违背了Cassandra的设计原则。尝试减少需要触发的查询。在您的情况下,有必要使用emailId作为PRIMARY KEY的表。