休息通信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 自动使令牌过期。
我需要在 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 自动使令牌过期。