Cassandra数据建模:选择分区键和组合键

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

我正在尝试使用Cassandra进行数据建模,我对应该选择什么作为分区键和组合键感到困惑。我的表格如下所示

CREATE TABLE mykeyspace.mytable ( 
id UUID,
A text,
B text,
C text,
D text,
... other columns
PRIMARY KEY(id)
);

我在表中引入了一个id列,并将其作为主键,因此使用id进行查询的速度更快。

我面临的问题是一组列(A,B,C,D)唯一地标识数据,每当我执行插入操作时,我都想避免重复和搜索一组列(A,B,C ,D)可能很昂贵,因为它不是我的主键的一部分。

我随机生成ID,尽管我的一种方法是对4列进行哈希处理,但是它可以解决复制问题,但是我对如果开始对ID进行哈希处理时如何分配数据表示怀疑。

[我虽然将(A,B,C,D)用作聚类键的其他方法,所以我的主键现在看起来像((id), A,B,C,D),并且在插入之前使用聚类键来防止重复,但是我不确定如何高效的搜索仅使用聚类键?上述哪种数据建模方法更合适,或者还有其他方法?

database cassandra nosql data-modeling datastax-enterprise
1个回答
0
投票

如果您最关心的是数据完整性(没有重复),则除了将(A,B,C,D)用作主键之外,您别无选择。关于选择那些列的哪个子集作为分区键,有一些注意事项。其中之一是,为了获得更好的可伸缩性,您希望在分区之间大致均匀地分布数据。因此,如果D只能有2个值,其中一个用在99%的行中,请不要使D成为唯一的分区列。另一个注意事项是您要如何查询数据。如果您希望能够按列子集进行查询-例如,按(A,B,C)和(B,C,D)查询,则您的分区键选择仅限于B或C,或者(B,C)。

© www.soinside.com 2019 - 2024. All rights reserved.