2017-04-10 50 views
1

如果我使用随机生成的唯一标识,那么基数是否会相当大?分区键的基数是多少?

如果我有一个低基数像5类值,该分区键可以一键,我想发布它,推荐的方法似乎是使分区键成复合键。

但这需要我指定我的查询中的复合键的所有部分检索该键的所有记录。

即使这样生成的令牌最终可能会是同一个节点。

有没有办法在决定复合键,额外的列将保证数据将如何分配?

回答

1

的事情是,与卡桑德拉你真正想拥有“已知”,这样当你需要它,你可以访问数据分区键。我不确定你说的分区密钥的大基数是什么意思。您会在群集中获得很多分区。这通常是o.k.

如果您想要在集群周围分发数据。你可以使用人造的列。而且这种方法有时也被称为bucketing。基本上,如果你想保持100k +或从未版本100万+列,这是o.k.将这些数据分割成分区。

有些人简单地用一招,当他们插入数据,他们添加一些人工斗列分区......假设随机(1-10),然后当他们读出来的数据,他们只需发出10个查询或使用in运算符,然后获取数据并将其合并到客户端。这种方法有很多好处,它可以防止在群集中出现“热门行”。

机会为每个键都或多或少1/NUM_NODES它将在同一节点上结束。所以我会说大多数时候这不是你应该担心的事情。除非您的分区数量小于群集中节点的数量。

基本上有两种选择,用于附加列随机(已经描述)或基于某些输入数据的某些功能,即当使用时间序列数据并且您决定基于月份进行存储时,您总是可以根据数据计算月份你要插入,然后你把它放在桶里。当你检索数据时,你就知道... ...。我在2016年5月看到了一些东西,然后你知道如何选择合适的存储桶。