代码之家  ›  专栏  ›  技术社区  ›  Eoin Campbell

对于整数属性上的“between”查询,这是否是来自cosmosdb的预期查询性能?

  •  0
  • Eoin Campbell  · 技术社区  · 8 年前

    我有一个COSMOSDB集合(SQLAPI),我用表示CIDR网络范围的文档填充了它。

    每个文件的相关部分是

    {
            "Network": "31.216.102.0/23",
            "IPRangeStart": 534275584,
            "IPRangeEnd": 534276095,
    

    每个CIDR块的起始和结束IP地址都转换为 uint 存储在HTE中 RangeStart RangeEnd 属性。

    当我运行一个查询来按它的起始范围搜索一个特定的条目时,它会像预期的那样工作并且非常快。

    SELECT top 1 * FROM c WHERE c.IPRangeStart = 532361216 
    Request Charge: 3.02 RUs
    

    但是,当我使用<=/=>运算符引入中间查询时,它会变得非常昂贵。

    SELECT top 1 * FROM c WHERE c.IPRangeStart <= 534275590 AND c.IPRangeEnd >= 534275590 
    Request Change: 1647.99 RUs
    

    我已经查看了集合上的索引设置

    我还为所讨论的两个特定属性在集合中应用了另外两个整数范围索引。尽管似乎没有办法检查这些索引在后台应用/创建的进度。

    有什么明显的东西我可能不见了吗?

    {
        "indexingMode": "consistent",
        "automatic": true,
        "includedPaths": [
            {
                "path": "/*",
                "indexes": [
                    {
                        "kind": "Range",
                        "dataType": "Number",
                        "precision": -1
                    },
                    {
                        "kind": "Hash",
                        "dataType": "String",
                        "precision": 3
                    }
                ]
            },
            {
                "path": "/IPRangeStart/?",
                "indexes": [
                    {
                        "kind": "Range",
                        "dataType": "Number",
                        "precision": -1
                    },
                    {
                        "kind": "Hash",
                        "dataType": "String",
                        "precision": 3
                    }
                ]
            },
            {
                "path": "/IPRangEnd/?",
                "indexes": [
                    {
                        "kind": "Range",
                        "dataType": "Number",
                        "precision": -1
                    },
                    {
                        "kind": "Hash",
                        "dataType": "String",
                        "precision": 3
                    }
                ]
            }
        ],
        "excludedPaths": []
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Eoin Campbell    8 年前

    我想我解决了。这个问题是因为我对一个属性进行了大于查询,对另一个属性进行了小于查询。

    似乎Cosmos正在合并满足每个独立筛选子句的完整文档集。

    由于该装置中最大的CIDR范围是A/18(16K地址块),所以可以通过说让它工作。

    Where start <= value 
    And start >= value-32786
    And end >= value
    And end <= value+32768