如果有其他聚类键保证记录的唯一性,如何按日期列排序

问题描述 投票:0回答:1

我正在“密码存储系统”主题领域编写一个测试项目。

create table users
(
    login               text primary key,
    access_token        text,
    access_token_expire timestamp,
    password            text
);
create table credentials
(
    user_login              text,
    resource_name           text,
    resource_login          text,
    changed_at              timestamp,
    created_at              timestamp,
    id                      uuid,
    password_security_level int,
    resource_password       text,
    primary key (user_login, resource_name, resource_login)
)
create table credentials_history
(
    credential_id     uuid,
    resource_password text,
    changed_at        timestamp,
    primary key (credential_id, changed_at)
);

问题出现在凭证表上,问题是我选择了 user_login、resource_name、resource_login 字段作为主键的一部分,因为它们将保证某个帐户在某个用户的某个资源上的唯一性,我将能够通过帐户的唯一字段进行搜索,但我希望这些数据按created_at降序排序,然后在应用程序中使用分页部分发布它们。我想到的唯一选择是制作两个表而不是一个表,并将它们命名为 credetials_unique &credentials_sorted_by_created_at,credentials_unique 我将用作现在的凭据,即在创建之前检查这样的用户帐户是否已存在,并保证唯一性,在第二个表credentials_sorted_by_created_at中,我将插入相同的所有内容,但已经有 PartitionKey(user_login) 和 ClusteringKey(created_at)

请告诉我,更好的选择,这到底是实践过的,还是一开始就有问题?

与credentials_history类似的故事,理论上我会有表格

用于检查此类帐户是否已存在的表 (这个名字让我很困惑) 凭据_按_资源_名称_和_资源_登录 PK((用户登录), 资源名称, 资源登录)

按排序顺序向用户显示信息的表格。 证书 PK((用户登录), 创建时间)

用于检查该帐户是否已使用该密码的表 密码凭证历史记录 PK((凭据_id),资源_密码)

按排序顺序向用户显示信息的表格。 凭据_历史记录 PK((credential_id),changed_at)

cassandra data-modeling
1个回答
0
投票

为什么不将

created_at
作为聚类键的一部分,例如,

PRIMARY KEY((user_login), resource_name, resource_login, created_at)
© www.soinside.com 2019 - 2024. All rights reserved.