我在一个数据库中有几个由PartitionKey属性分区的不同实体的集合。 我正在为每个实体存储库创建新的DocumentClient并将HashPartitionResolver绑定到它:
var hashResolver = new HashPartitionResolver(partitionKeyExtractor, partitionCollectionsSelfLinks, hashGenerator:new HashGenerator());
client.PartitionResolvers[db.SelfLink] = hashResolver;
但是当我试图插入实体时:
await _client.UpsertDocumentAsync(Database.SelfLink, entity);
某些实体经常进入错误的分区。我想这可能是因为一个数据库中每个实体的分区数不同。
有谁知道是什么原因导致这个问题,我该如何解决?谢谢你的帮助!
答案 0 :(得分:0)
最后我发现了问题。 在反编译HashPartitionResolver和ConsistentHashRing的代码后,我发现ConsistentHashRing有这一行:
byte[] hash = hashGenerator.ComputeHash(BitConverter.GetBytes(node.GetHashCode()));
但在代码的另一部分中有这一行:
byte[] hash = hashGenerator.ComputeHash(Encoding.UTF8.GetBytes(node));
所以当我把第一个改为
时byte[] hash = hashGenerator.ComputeHash(Encoding.UTF8.GetBytes(node));
一切正常。我认为这是因为硬件依赖BitConverter或GetHashCode方法。 GitHub中的相关问题:Different Partitioning Schemes in the same database