我在项目中使用Cassandra,我需要存储有关用户的信息(电子邮件,用户名,密码,名字和其他附加信息)。此数据也用于授权目的。
我是为Cassandra的数据模型设计数据库的新手。所以,我需要你的帮助才能理解我是否正确地做到了这一点。
我的密钥空间名为“users”。在此密钥空间中,我使用用户的电子邮件作为主键。我有以下列系列:名字,姓氏,用户名,密码。
主要问题如下:使用电子邮件作为关键是一个好主意吗?
对于密码 - 是否可以存储它的MD5哈希值,还是有更好的做法?
UPD 我上面有印刷错误。我的意思是 - 一个密钥空间作为数据库“测试”,一个列系列“用户” - 用户信息的集合和每个用户属性的许多单独的列。
答案 0 :(得分:3)
如果您查找用户和电子邮件的方式是唯一的,那么将电子邮件用作密钥就可以了。如果您通过用户名和用户名查找用户是唯一的,则使用用户名作为密钥。如果您需要通过用户名和电子邮件进行查找,那么您需要第二个列系列来映射用户名 - >电子邮件。
不要存储纯文本密码。即使存储密码的md5和盐也是不够的。见this post
答案 1 :(得分:3)
对于用户的每个属性,您不需要单独的列族。您可以将它们全部放在具有多个列的单个列族中,例如:
key -> firstname lastname username password
John Smith jsmith 1AB3C4GA16GH134G
设计取决于您要执行的查找。如果您只需要通过他们的电子邮件地址查找用户,那么您提出的建议就可以了。但是当用户更改其电子邮件地址时会发生什么?如果用户名是固定的,那么键入用户名可能更简单......
[更新]如果您总是一次检索所有用户数据,并且您只按密钥检索数据,那么您当然可以将所有嵌入在一列中的信息存储为JSON或类似信息。但是,您失去了按名称,用户名等查找用户的任何能力。