【问题标题】:How performant are documentdb string range queries expected to be?documentdb 字符串范围查询的性能如何?
【发布时间】: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


【解决方案1】:

精度越低,索引的性能就越慢。由于您正在进行 = 比较,因此您确实希望确保已将精度设置为最大量。

更多信息在这里:docs.microsoft.com "index precision"

就这样吧。

{
  "indexingMode": "lazy",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/ipv4hexfrom/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "String",
          "precision": -1
        }
      ]
    },
    {
      "path": "/ipv4hexto/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "String",
          "precision": -1
        }
      ]
    },
    {
      "path": "/ipv6hexfrom/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "String",
          "precision": -1
        }
      ]
    },
    {
      "path": "/ipv6hexto/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "String",
          "precision": -1
        }
      ]
    }
  ],
  "excludedPaths": [
    {
      "path": "/*"
    }
  ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多