如果我使用随机生成的唯一ID,那是否正确 基数会相当大吗?
如果我有一个低基数的密钥,比如分区密钥可以采用的5个类别值,并且我想分发它,推荐的方法似乎是将分区密钥转换为复合密钥。
但这要求我必须在查询中指定复合键的所有部分以检索该键的所有记录。
即使这样,生成的令牌也可能最终用于同一节点。
有没有办法决定复合键的附加列,以保证数据的分发?
答案 0 :(得分:1)
问题是,对于cassandra,你实际上想拥有分区键"已知"这样您就可以在需要时访问数据。当你在分区键上说大基数时,我不确定你是什么意思。您将在群集中获得大量分区。这通常是o.k。
如果要在群集周围分发数据。您可以使用人工柱。这种方法有时也称为分组。基本上,如果你想保持100k +或从不100万+ +版本,那么它就是o.k.将此数据拆分为分区。
有些人只是使用技巧,当他们插入数据时,他们会添加一些人工桶列进行分区......让我们说随机(1-10)然后当他们读取数据时他们只是发出10个查询或使用in运算符然后获取数据并在客户端合并它。这种方法有许多好处,因为它可以防止热排的出现。在群集中。
每个密钥的机会或多或少都是1 / NUM_NODES,它将在同一节点上结束。所以我会说大多数时候这不是你应该担心的太多。除非您的分区数小于集群中的节点数。
基本上有两种选择可供选择附加列(已经描述过)或某些基于某些输入数据的功能,即当使用时间序列数据并且您决定根据月份进行存储时,您可以始终根据数据计算月份你要插入然后你把它放入桶中。当您检索数据时,您知道... o.k.我在2016年5月看了一些东西,然后你知道如何选择合适的桶。