【问题标题】:User info storage in CassandraCassandra 中的用户信息存储
【发布时间】:2012-01-07 04:55:35
【问题描述】:

我在我的项目中使用 Cassandra,我需要存储有关用户的信息(电子邮件、用户名、密码、名字和其他附加信息)。此数据也用于授权目的。

我是为 Cassandra 的数据模型设计数据库的新手。所以,我需要你的帮助来了解我是否正确地做到了这一点。

我有一个名为“users”的键空间。在这个键空间中,我使用用户的电子邮件作为主键。我有以下列系列:名字、姓氏、用户名、密码。

主要问题如下:使用电子邮件作为密钥是否是个好主意?

对于密码 - 存储它的 MD5 哈希是否好,或者有更好的做法吗?

UPD 我上面有错字。我的意思是 - 一个键空间作为数据库“测试”,一个列族“用户” - 用户信息的集合以及每个用户属性的许多单独列。

【问题讨论】:

    标签: database-design cassandra


    【解决方案1】:

    如果您是这样查找用户并且电子邮件是唯一的,那么使用电子邮件作为键就可以了。如果您通过用户名查找用户并且用户名是唯一的,则使用用户名作为键。如果您需要通过用户名和电子邮件查找,那么您将需要第二个列族来映射用户名->电子邮件。

    不要存储纯文本密码。即使存储密码的 md5 和盐也是不够的。见this post

    【讨论】:

    【解决方案2】:

    您不需要为用户的每个属性使用单独的列族。您可以将它们全部放在一个包含多个列的列族中,例如:

    key -> firstname    lastname    username    password
           John         Smith       jsmith      1AB3C4GA16GH134G
    

    设计取决于您要执行的查找。如果您只需要通过电子邮件地址查找用户,那么您的建议就可以了。但是当用户更改他们的电子邮件地址时会发生什么?如果用户名是固定的,那么键入用户名可能会更简单......

    [更新] 如果您总是一次检索所有用户数据,并且只通过键检索数据,那么您当然可以将嵌入在单个列中的所有信息存储为 JSON 或类似的。但是,您将无法按姓名、用户名等查找用户。

    【讨论】:

    • 你是对的!如果列族大约有很多 - 这是印刷错误。我的意思是 - 一个键空间测试(db),一个列族“用户”,以及每个 person 属性的许多单独列。
    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2011-11-21
    相关资源
    最近更新 更多