rest通信cassandra的建模帐户
我需要在cassandra中建模帐户(名字、姓氏、作为用户名的电子邮件等)以及当前活动的令牌 我最初的想法是创建rest通信cassandra的建模帐户,cassandra,data-modeling,Cassandra,Data Modeling,我需要在cassandra中建模帐户(名字、姓氏、作为用户名的电子邮件等)以及当前活动的令牌 我最初的想法是创建account\u by_email,它将通过电子邮件以静态列对细细的行进行分区,并通过access\u token(可能还有TTL)进行聚类,这样您就可以始终根据当前电子邮件找到访问令牌 但我们要求客户端只在登录后发送access\u token,并且基于此,必须从数据库中提取当前用户 我可以再创建一个表,其中电子邮件将通过access\u token进行分区,但这对我来说是开销和大
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并在
表中插入新的token行,为用户设置新的tokentokens
- 通过令牌获取用户电子邮件,即使令牌已过期
- 获取当前用户的活动令牌
- 具有用户的完整令牌历史记录(但无法对该类型的信息运行有效查询,您可以使用Spark/SparkSQL/Hive进行查询)
- 通过为单个
列设置TTL,自动使令牌过期当前\u令牌
当前\u令牌添加到用户表中。这样可以解决历史问题,并且在生成新令牌时,两个表中只需要插入。谢谢你的回答,这也是我的想法链,但我想得到更多的想法。@NenadBozic在这种情况下,你可以将令牌逻辑从用户表中分离出来。对于访问令牌,有两个单独的表,一个以电子邮件作为分区密钥,另一个以访问令牌作为分区密钥。我觉得重用表(比如用户)来保存历史不是一个好主意。