gpt4 book ai didi

database - 如果我使用复合键,数据会在同一个分区中吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:10 25 4
gpt4 key购买 nike

考虑以下有关 Cassandra 数据库的情况:我必须对一些相关数据执行批处理语句,例如:表 users 和表 users_by_username。我想在两个表上插入用户创建数据。这是一个交易。在 Cassandra 文档中说批处理语句不能到达多个分区。如果我将主键建模为复合键,如下所示:

CREATE TABLE IF NOT EXISTS user(
id text,
tpe text,
username text,
PRIMARY KEY((tpe, id))
);

CREATE TABLE IF NOT EXISTS user_by_username(
username text,
tpe text,
id text,
PRIMARY KEY((tpe, username))
);

行示例:

用户:('1','用户','lucasrpb')user_by_username: ('lucasrpb', 'users', '1')

我的疑问:数据是否在同一个分区上才能进行批处理?

最佳答案

分区在一个表内,而不是跨表。但是,数据的 token (用于标识哪些副本将托管数据)基于分区键(主键中的第一列,或第一列括在括号中)。

在你的例子中,'user' 的 partition 键是 (tpe, id)user_by_username(tpe,用户名)。因此,数据的 token 可能会不同。

如果 userprimary 键是 (tpe, id), user_by_username (tpe , 用户名),每个案例的分区键将是 tpe,因此授予的 tpe 是相同的, token 将是相同的,因此数据将是存储在相同的副本上。

无论如何,我不建议将user_by_usernameuser 一起更新的批处理操作,但在分区键相同的情况下会更好因为批处理中需要写入的 C* 节点更少。

因为你的表之间的唯一区别是你的主键,我认为如果你使用的是 3.0+ 版本,那么一个很好的选择是查看 materialized views。这是在 3.0 中引入的。有了这个,您可以从 user 表中设置一个 user_by_username View ,例如:

CREATE MATERIALIZED VIEW user_by_username AS 
SELECT * FROM users
WHERE username IS NOT NULL
PRIMARY KEY ((tpe, username));

这样您只需对 user 进行更改,然后它会为您传播到 user_by_username

关于database - 如果我使用复合键,数据会在同一个分区中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38257165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com