Azure Расчет CosmosDb ru в SQL API-запросе - PullRequest
0 голосов
/ 22 января 2020

У меня есть коллекция с ~ 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, но как это сделать, потому что в статус этого документа активно обновляется, и мне нужно улучшить производительность приложения, есть ли способ оптимизировать запрос или любое другое решение для этого.

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Прежде всего, существует сценарий, близкий к смерти, для использования объединений в Космосе с большим количеством запросов к документу, так как вычисление будет намного выше, чем в ваших документах в коллекции, следующие моменты, которые следует учитывать, чтобы избежать запросов такого типа:

  • Переопределите структуру документа, если вы можете, индексируя элементы очереди:

    { "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, который будет фильтровать каждый документ, а не объединяться,
  • Index Ваши свойства запросов в настройках коллекции
  • Красота NO SQL заключается в хранении данных в любой схеме, поэтому вам следует оптимизировать структуру документа в соответствии с вашими запросами.

Надеюсь, что это Вам будет достаточно избавиться от объединений в вашем запросе.

0 голосов
/ 27 января 2020

Я должен сказать, что есть много способов для повышения производительности запроса, но никакие прямые способы не могут помочь вам сократить расходы без потерь. В конце концов, вам нужно реализовать основы c Ваши бизнес-требования.

Как указано выше, c говорит: Стоимость, связанная с каждой из этих операций, варьируется в зависимости от процессора, ввода-вывода и памяти, необходимых для завершения операции, что означает, что каждая стоимость sql действительно составляет sense.

Я бы посоветовал вам попытаться добавить некоторые индексы для определенных c свойств. Кроме того, попробуйте разделить sql. Например, сначала отфильтруйте entityType и facilityId, затем используйте объединение, чтобы отфильтровать isLatest или что-то еще.

...