数据库cassandra数据建模:分区键和复合键的选择

wfsdck30  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(505)

我正在尝试用cassandra进行数据建模,我不知道应该选择什么作为分区键和复合键。我的table看起来像下面

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) 在插入之前使用聚类键来防止重复,在这里我不确定仅仅使用聚类键搜索的效率有多高?以上哪种数据建模方法更合适?还有其他方法吗?

km0tfn4u

km0tfn4u1#

如果您主要关心的是数据完整性(无重复),那么您真的别无选择,只能将(a、b、c、d)作为主键。至于选择这些列中的哪一个子集作为分区键,有几个考虑因素。其中之一是为了更好的可伸缩性,您需要在分区之间近似均匀地分布数据。因此,如果d只能有2个值,其中一个用于99%的行中,请不要将d设为唯一的分区列。另一个需要考虑的问题是如何查询数据。如果您希望能够按列的子集进行查询——例如,按(a,b,c)和(b,c,d)进行查询,那么您的分区键选择仅限于b、c或(b,c)。

相关问题