【问题标题】:Cassandra schema for authentication用于身份验证的 Cassandra 模式
【发布时间】:2021-10-22 18:07:16
【问题描述】:

我正在尝试设计一个数据库来存储用户信息并对其进行身份验证。

我的字段包括姓名、电子邮件、密码、电话号码、城市

我应该如何对我的数据进行分区,以便高效地对它们进行身份验证??

【问题讨论】:

  • 通过电子邮件进行身份验证?然后将其用作分区键

标签: database-design cassandra cassandra-3.0 cassandra-2.0 datastax-astra


【解决方案1】:

根据您的需要,有不同的处理方式。我们建议您使用自然键,例如电子邮件地址,因为默认情况下它们是唯一的。

这是一个使用电子邮件作为分区键的表架构:

CREATE TABLE users_by_email (
    email text,
    name text,
    password text,
    phone text,
    city text,
    PRIMARY KEY (email)
)

如果您希望用户能够选择用户名,则有一种变体:

CREATE TABLE users_by_username (
    username text,
    email text,
    name text,
    password text,
    phone text,
    city text,
    PRIMARY KEY (username)
)

我们建议您将 Cassandra 的比较和设置 (CAS) 功能与 lightweight transactions (LWT) 结合使用,使用条件 IF EXISTSIF NOT EXISTS。例如,为了防止覆盖现有用户的详细信息:

INSERT INTO users_by_email (...) VALUES (...) IF NOT EXISTS
INSERT INTO users_by_username (...) VALUES (...) IF NOT EXISTS

作为与架构无关的旁注,我们建议您在将用户密码存储到数据库之前对其进行加密,以实现最佳实践。干杯!

【讨论】:

  • 使用电子邮件作为分区键有用吗?不会创建太多分区吗??
  • 任何自然键都是有用的,并且电子邮件地址在各种 Cassandra 用例中被大量使用,因为它们是普遍唯一的。您将拥有与拥有用户一样多的分区。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 2011-11-25
  • 2021-12-09
  • 2012-10-23
相关资源
最近更新 更多