rest通信cassandra的建模帐户

rest通信cassandra的建模帐户,cassandra,data-modeling,Cassandra,Data Modeling,我需要在cassandra中建模帐户(名字、姓氏、作为用户名的电子邮件等)以及当前活动的令牌 我最初的想法是创建account\u by_email,它将通过电子邮件以静态列对细细的行进行分区,并通过access\u token(可能还有TTL)进行聚类,这样您就可以始终根据当前电子邮件找到访问令牌 但我们要求客户端只在登录后发送access\u token,并且基于此,必须从数据库中提取当前用户 我可以再创建一个表,其中电子邮件将通过access\u token进行分区,但这对我来说是开销和大

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

我最初的想法是创建
account\u by_email
,它将通过电子邮件以静态列对细细的行进行分区,并通过
access\u token
(可能还有TTL)进行聚类,这样您就可以始终根据当前电子邮件找到访问令牌

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

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

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

我可以再创建一个表,在这个表中,电子邮件将由access_令牌进行分区,但这对我来说是开销和大量分区

在表中使用大量分区有什么问题?这绝对是一种正确的卡桑德拉做事方式:

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
表,该表将token作为分区键。使用此型号,您可以:

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

将电子邮件、名字和姓氏设置为静态,并在UDT令牌上进行集群,这将是一个好主意,而不是将
当前\u令牌添加到用户表中。这样可以解决历史问题,并且在生成新令牌时,两个表中只需要插入。谢谢你的回答,这也是我的想法链,但我想得到更多的想法。@NenadBozic在这种情况下,你可以将令牌逻辑从用户表中分离出来。对于访问令牌,有两个单独的表,一个以电子邮件作为分区密钥,另一个以访问令牌作为分区密钥。我觉得重用表(比如用户)来保存历史不是一个好主意。