休息通信cassandra的建模帐户

Modeling account for rest communication cassandra

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

我最初的想法是创建 account_by_email,它将瘦行按带有静态列的电子邮件进行分区,并按 access_token(可能还有 TTL)进行聚类,这样你总能找到基于访问令牌的在当前电子邮件中。

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

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

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

I can create one more table where email will be partitioned by access_token but that seams to me as overhead and lot of partitions.

大量分区有什么问题 table?这绝对是一种正确的 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
);

所以你有一个单独的 table 供用户使用,tokens table 将令牌作为分区键。使用此模型,您可以:

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