Azure DocumentDb GUID索引精度

Azure DocumentDb GUID索引精度,azure,azure-cosmosdb,Azure,Azure Cosmosdb,假设我们的文档中有一个非唯一的GUID/UUID值: [ { "id": "123456", "Key": "117dfd49-a71d-413b-a9b1-841e88db06e8" "Name": "Kaapstad", }, ... ] 我们只想通过平等来质疑这一点。不需要范围或orderby查询。例如: SELECT * FROM c where c.Key = "117dfd49-a71d-413b-a9b1-841e88db06e8" 下面是索

假设我们的文档中有一个非唯一的GUID/UUID值:

[
  {
    "id": "123456",
    "Key": "117dfd49-a71d-413b-a9b1-841e88db06e8"
    "Name": "Kaapstad",
  },
  ...
]
我们只想通过平等来质疑这一点。不需要范围或orderby查询。例如:

SELECT * FROM c where c.Key = "117dfd49-a71d-413b-a9b1-841e88db06e8"
下面是索引定义。它是一个使用
String
数据类型的散列索引(因为不会执行范围查询)(因为Javascript本身不支持Guid)

collection.IndexingPolicy.includedpath.Add(
新IncludedPath{
Path=“/Key/?”,
索引=新集合{
新的HashIndex(DataType.String){Precision=-1}
}
});
但这方面的最佳索引精度是多少?

我不清楚什么样的精度值最适合这样的值:

索引精度配置对于字符串范围更有用。自从 字符串可以是任意长度,可选择索引精度 可能会影响字符串范围查询的性能,并影响 所需的索引存储空间量。字符串范围索引可以是 配置为1-100或-1(“最大值”)。如果你想表演 对于字符串属性的Order By查询,则必须指定 对应路径的精度为-1


您可以根据希望包含属性键路径的文档数(在您的示例中正好是
属性)微调索引精度值

哈希索引的索引精度指示要将属性值哈希到的字节数。因此,降低精度值有助于优化存储索引所需的存储量。提高精度值(在哈希索引的上下文中)有助于防止索引上的哈希冲突

例如,假设路径
foo
上的哈希索引精度值为3

3字节=3*8=24位

24位可支持:2^24=16777216个值


根据鸽子洞原则,当使用
foo
属性存储>16777216个文档时,保证会发生哈希冲突。一旦发生哈希冲突,DocumentDB将需要对找到的文档子集执行扫描。例如,如果您有30000000个具有
foo
属性的文档,那么您可以期望平均扫描2个文档。

回答非常好。我在文档中找不到类似的内容,但可能我没有仔细查看!
collection.IndexingPolicy.IncludedPaths.Add(
    new IncludedPath { 
        Path = "/Key/?", 
        Indexes = new Collection<Index> { 
            new HashIndex(DataType.String) { Precision = -1 }
        }
    });