【问题标题】:Azure CosmosDb ru's Calculation in SQL API QueryAzure CosmosDb ru 在 SQL API 查询中的计算
【发布时间】:2020-01-22 13:41:41
【问题描述】:

我有一个包含 ~10000 个文档的集合,我已经触发 SQL 查询来检查 Ru 的计算,这个查询是针对不同状态的仪表板计数。

       {
        "entityType": "vehicleStatus",
        "vehicleCheckInId": "8cd93887-ce34-4b1d-87f6-2f36723319a8",
        "email": "bsellarbn@instagram.com",
        "tag": 420,
        "vin": "1C3BC2FB6BN851962",
        "phoneNumber": "549-357-1195",
        "customerName": "Bambie",
        "facilityId": "7f8663b4-5270-4259-ad33-6646ec33cd42",
        "vehicleId": "427c6d23-eb65-40cd-b8fa-f0159063509f",
        "facilityName": "Abc Service Center",
        "roNumber": "RO70-527-0925",
        "vehicleDetail": [
            {
                "make": "Subaru",
                "model": "Outback",
                "trim": "05-387-2180",
                "year": 2018,
                "colorCode": "#6bbede"
            }
        ],
        "advisor": [
            {
                "id": "35d55e01-fbb7-4752-8423-3859f0d46bde",
                "name": "Abc"
            }
        ],
        "techinician": [
            {
                "id": "480b8d19-fc1a-42df-a1e0-d70b35f4d8fb",
                "name": "Bcd"
            }
        ],
        "subQueue": [
            {
                "id": 3,
                "queueId": 2,
                "quoteId": "e9e1e0a1-e905-484b-9b32-638f3601bee5",
                "primaryfacilityId": "null",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 5,
                "queueId": 2,
                "quoteId": "cbf47904-4549-40bd-9788-c67de5a3da33",
                "primaryfacilityId": "null",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 7,
                "queueId": 3,
                "quoteId": "4d6f6d6e-f97d-4875-80bc-0d6f255715a3",
                "primaryfacilityId": "null",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 8,
                "queueId": 3,
                "quoteId": "903aeb55-21ef-402f-83d1-3f10c3887cb8",
                "primaryfacilityId": "null",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 14,
                "queueId": 5,
                "quoteId": "060c51a1-31df-4169-bfe7-1270c88a328b",
                "primaryfacilityId": "null",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 15,
                "queueId": 5,
                "quoteId": "92494165-2eee-47dc-9da0-84dd2e5bbe73",
                "primaryfacilityId": "null",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 16,
                "queueId": 5,
                "quoteId": "8a73e5e7-5f8a-4be7-bd8f-5f99c2328f68",
                "primaryfacilityId": "c3851f80-0625-46bb-8c3c-78f1418e4caf",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 17,
                "queueId": 5,
                "quoteId": "8b517315-d754-4f04-bcf0-b74958f311ed",
                "primaryfacilityId": "c3851f80-0625-46bb-8c3c-78f1418e4caf",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 9,
                "queueId": 4,
                "quoteId": "65056abd-573c-4ede-826d-3c7a9aeeaba7",
                "primaryfacilityId": "c3851f80-0625-46bb-8c3c-78f1418e4caf",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 11,
                "queueId": 4,
                "quoteId": "96d73845-2ba8-4327-b0cc-7580b764f3da",
                "primaryfacilityId": "c3851f80-0625-46bb-8c3c-78f1418e4caf",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 10,
                "queueId": 4,
                "quoteId": "2f24e83d-3cf6-42c9-b50a-4d1a5e68f1f4",
                "primaryfacilityId": "c3851f80-0625-46bb-8c3c-78f1418e4caf",
                "isLatest": "false",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            },
            {
                "id": 12,
                "queueId": 4,
                "quoteId": "04e0142b-ff21-46ca-8346-3e557bd0ba79",
                "primaryfacilityId": "c3851f80-0625-46bb-8c3c-78f1418e4caf",
                "isLatest": "true",
                "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c"
            }
        ],
        "createdDate": "2019-12-24 21:57:54",
        "deletedDate": "null",
}
**Query :** 
SELECT q.queueid,q.id 
FROM c JOIN q IN c.subQueue 
where c.entityType='vehicleStatus' 
and c.facilityId='7f8663b4-5270-4259-ad33-6646ec33cd42' 
and q.queueid=4 and q.id=12 and q.isLatest='true'

执行此查询后,我注意到的 Ru 是 1200 Ru,这对我来说非常高而且花费更多,我需要优化查询或文档以降低 RU 消耗,但是如何做到这一点,因为在这个文档状态正在积极更新中, 我需要提高应用程序的性能,有什么方法可以优化查询或任何其他解决方案。

谢谢

【问题讨论】:

    标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    不得不说,有many ways可以提高查询的性能,但是没有直接的方法可以帮助你降低成本而不损失任何损失。毕竟,你必须实现你的基本业务需求。

    正如上面的文档所说:与每个操作相关的成本因完成操作所需的 CPU、IO 和内存而异,这意味着每个 sql 成本都是有意义的。

    我建议您尝试在特定属性上添加一些索引。此外,请尝试拆分sql。比如先过滤entityTypefacilityId,再用join过滤isLatest或者别的什么。

    【讨论】:

      【解决方案2】:

      首先,在 Cosmos 中使用联接进行如此多的文档查询时会出现濒临死亡的情况,因为根据您收集的文档,计算量会高得多,您应该考虑以下几点来避免这些类型的查询:

      • 如果可以的话,重新定义文档结构,将子队列项索引为:

        { "entityType": "vehicleStatus", "vehicleCheckInId": "8cd93887-ce34-4b1d-87f6-2f36723319a8", "email": "bsellarbn@instagram.com", "tag": 420, "vin": "1C3BC2FB6BN851962", "phoneNumber": "549-357-1195", "customerName": "Bambie", "facilityId": "7f8663b4-5270-4259-ad33-6646ec33cd42", "vehicleId": "427c6d23-eb65-40cd-b8fa-f0159063509f", "facilityName": "Abc Service Center", "roNumber": "RO70-527-0925", "vehicleDetail": [ { "make": "Subaru", "model": "Outback", "trim": "05-387-2180", "year": 2018, "colorCode": "#6bbede" } ], "advisor": [ { "id": "35d55e01-fbb7-4752-8423-3859f0d46bde", "name": "Abc" } ], "techinician": [ { "id": "480b8d19-fc1a-42df-a1e0-d70b35f4d8fb", "name": "Bcd" } ], "subQueue": { "11": { "id": 11, "queueId": 4, "quoteId": "96d73845-2ba8-4327-b0cc-7580b764f3da", "primaryfacilityId": "c3851f80-0625-46bb-8c3c-78f1418e4caf", "isLatest": "false", "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c" }, "10": { "id": 10, "queueId": 4, "quoteId": "2f24e83d-3cf6-42c9-b50a-4d1a5e68f1f4", "primaryfacilityId": "c3851f80-0625-46bb-8c3c-78f1418e4caf", "isLatest": "false", "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c" }, "12": { "id": 12, "queueId": 4, "quoteId": "04e0142b-ff21-46ca-8346-3e557bd0ba79", "primaryfacilityId": "c3851f80-0625-46bb-8c3c-78f1418e4caf", "isLatest": "true", "CreatedBy": "2d3af542-e6a4-4b3b-b93c-01aa06f77a2c" } }, "createdDate": "2019-12-24 21:57:54", "deletedDate": "null", }

      这可以改善您的查询:

      where q.subQueue["11"] <> null or any appropriate filter.
      
      • 其次,如果您想使用 subQueue 数组项的多个属性进行过滤,您绝对应该考虑使用 udf 过滤每个文档而不是加入,
      • 在集合设置中为您的查询属性编制索引,
      • NOSQL 的优点是可以将数据存储在任何模式中,因此您应该根据查询需要优化文档结构。

      希望这足以让您摆脱查询中的联接。

      【讨论】:

        猜你喜欢
        • 2018-04-27
        • 2019-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        相关资源
        最近更新 更多