【问题标题】:Modeling account for rest communication cassandra休息通信cassandra的建模帐户
【发布时间】:2015-08-18 00:15:52
【问题描述】:

我需要在 cassandra 中建模帐户(名字、姓氏、电子邮件作为用户名等)以及当前活动的令牌。

我最初的想法是创建account_by_email,它将通过电子邮件和静态列划分细行,并通过access_token(可能还有 TTL)进行聚类,并且您始终可以根据当前电子邮件找到访问令牌。

但我们要求客户端仅在登录后发送access_token,并且基于此必须从数据库中提取当前用户。

我可以再创建一个表,其中电子邮件将按access_token 进行分区,但这对我来说是开销和大量分区。然后我可以从access_token 收到电子邮件并始终通过电子邮件获取用户。

任何更好的想法和方法,它似乎是常见的用例,但是当 cassandra 用作存储时我找不到任何建模细节?

【问题讨论】:

    标签: cassandra data-modeling


    【解决方案1】:

    我可以再创建一个表,其中电子邮件将按 access_token 进行分区,但这对我来说是开销和很多分区。

    一个表的大量分区有什么问题?这绝对是正确的 Cassandra 做事方式:

    create table users (
      email text primary key,
      first_name text,
      last_name text,
      current_token text
    );
    
    create table tokens (
      auth_token text primary key,
      valid_until timestamp,
      email text
    );
    

    因此,您有一个单独的用户表,以及将令牌作为分区键的 tokens 表。使用此模型,您可以:

    • 通过使用 TTL 更新 users.current_token 并将新令牌行插入到 tokens 表中,为用户设置新令牌。
    • 通过令牌获取用户电子邮件,即使令牌已过期。
    • 获取当前用户的活动令牌。
    • 拥有用户的完整令牌历史记录(但无法对此类信息运行有效查询,您可以使用 Spark/SparkSQL/Hive)。
    • 通过为单个 current_token 列设置 TTL 自动使令牌过期。

    【讨论】:

    • 不要将current_token 添加到用户表中,而是将电子邮件、名字和姓氏设为静态并在UDT 令牌上进行聚类,并将其排序为DESC,这可能是一个好主意。这样可以解决历史记录,并且在生成新令牌时,只需在两个表中插入即可。感谢您的回答,这也是我的想法,但想获得更多想法。
    • @NenadBozic 在这种情况下,您可以将令牌逻辑与用户表分开。有两个单独的表用于访问令牌,一个以电子邮件作为分区键,另一个以访问令牌作为分区键。我觉得重用表(例如用户)来保留历史记录不是一个好主意。
    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 2014-02-22
    • 1970-01-01
    相关资源
    最近更新 更多