它是众所周知的在节点之间平衡数据的概念,并且在the manual中有清晰的描述。对于散列的分片键块,均衡器是如何工作的?如果根据分片键,某个分块中的文档属于该分片,那么该分块是否可以迁移?如果这不是真的,那么为什么文档在它们不属于的分片中?或者,只要分片数量不变,均衡器与哈希分片键无关?
发布于 2020-01-13 12:45:00
散列的分片键仍然像普通的基于范围的分片键一样工作。它们也可以像普通的分片密钥一样进行迁移、拆分等操作。
不同之处在于:散列分片键在最初分片集合时会有一些额外的过程。请参阅Hashed sharding上的文档页面
在对已填充的集合进行分片时:
分片操作创建初始分块,以覆盖整个分片键值范围。创建的区块数量取决于配置的区块大小。
对空集合进行分片时:
分片操作创建空分块以覆盖整个分片键值范围,并执行初始分块分布。默认情况下,该操作为每个分片创建2个块,并跨集群迁移。
简而言之,散列分片预先分割了整个散列关键字空间,然后平衡器像往常一样在集群中移动块。
除了初始分块之外,它们的功能就像一个普通的分片键。
请注意,如果您的分片键非常单调地增加,以防止“热分片”,并有助于将您的写入分散到整个集群中,则哈希分片键可以提供帮助。使用散列分片键并不能保证不会有巨型块,因为散列键的基数将反映实际键的基数。
例如:假设散列算法是MD5 (大小为128位)。潜在地,MD5空间非常大。但是,如果基础键(未散列的)值只能是A或B,则使用MD5散列的这两个值将始终得到A -> bf072e9119077b4e76437a93986787ef和B -> 30cf3d7d133b08543cb6c8933c29dfd7,从而使得基数非常小。
https://stackoverflow.com/questions/59696148
复制相似问题