为休息通信cassandra建模帐户

Nen*_*zic 8 data-modeling cassandra

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

我最初的想法是创建account_by_email哪些将通过带有静态列的电子邮件分区的瘦行,并且通过access_token(可能是TTL)进行聚类,并且总是可以根据当前电子邮件找到访问令牌.

但是我们要求客户端仅在登录后发送,access_token并且基于它必须从DB中提取当前用户.

我可以创建一个表,其中电子邮件将被分区,access_token但是作为开销和许多分区的接口.然后我就可以收到电子邮件access_token并通过电子邮件获得用户.

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

shu*_*tty 3

我可以再创建一张表,其中电子邮件将按 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
);
Run Code Online (Sandbox Code Playgroud)

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

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