【发布时间】:2018-03-22 23:06:57
【问题描述】:
我正在尝试使用 documentdb 对 IPv4 和 IPv6 网络分配数据进行范围搜索。由于 v6 数字如此之大,我将所有地址转换为固定长度的十六进制字符串并使用范围搜索。我有一个标准的 250GB 分区集合,消耗了大约 20GB。我有大约 250 万份文件。我的请求单位当前设置为 20,100。
我的问题是,即使我将 MaxDegreeOfParallelism 设置为 25,此集合的范围搜索速度也非常慢(某些值需要 20 到 40 秒)。我正在使用范围搜索来查找单个 IP 地址。这是我正在使用的索引策略:
{
"indexingMode": "lazy",
"automatic": true,
"includedPaths": [
{
"path": "/ipv4hexfrom/?",
"indexes": [
{
"kind": "Range",
"dataType": "String",
"precision": 8
}
]
},
{
"path": "/ipv4hexto/?",
"indexes": [
{
"kind": "Range",
"dataType": "String",
"precision": 8
}
]
},
{
"path": "/ipv6hexfrom/?",
"indexes": [
{
"kind": "Range",
"dataType": "String",
"precision": 32
}
]
},
{
"path": "/ipv6hexto/?",
"indexes": [
{
"kind": "Range",
"dataType": "String",
"precision": 32
}
]
}
],
"excludedPaths": [
{
"path": "/*"
}
]
}
这是一个示例查询:
SELECT * FROM c
WHERE c.ipv4hexfrom <= "cfd95803" AND c.ipv4hexto >= "cfd95803"
除了字符串索引之外,documentdb 会自动将数字索引添加到我应用的策略中,大概是因为它看到的东西看起来像数字。结果,如果我查询一个十六进制值在十进制范围内的 IP,查找时间是一两秒。其他值似乎使用字符串索引并且非常慢。
我使用的是最新的 1.12 SDK 版本。
我可以将 IPv4 条目视为直接整数以获得更好的性能,但是 IPv6 查找仍然会很慢。我宁愿避免将 IPv6 地址拆分为多个数字字段以获得所需的性能。
【问题讨论】:
-
值得向 MS 支持或产品论坛咨询吗?你也可以推特 Azure 支持,他们可能会引导你到最好的地方询问
标签: performance azure azure-cosmosdb