Каков рекомендуемый способ запроса документов из разных разделов в CosmosDB?
При использовании Azure Cosmos DB и запросе одного раздела я просто указываю ключ раздела в FeedOptions. Но когда мне нужно запросить n разделов, у меня есть (afaik) 2 варианта:
- Запустите отдельную задачу для каждого раздела и объедините результат в код моего приложения
- Установите флажок "EnableCrossPartitionQuery" (вместе с MaxDegreeOfParallelism) в FeedOoptions и противопоставьте мои разделы в запросе.
Когда мне нужно применить критерии сортировки вместе с разбивкой по страницам на весь набор результатов (по всем разделам), я думаю, что первый подход достигнет своих пределов.
Каков рекомендуемый способ выполнения запросов к нескольким разделам в базе данных Cosmos с использованием API.NET SQL?
1 ответ
Первый подход не рекомендуется, если вы не знаете каждое возможное значение ключа раздела, которое есть в ваших документах, и вы не готовы написать некоторый параллельный код запроса. Это эффективно, только если вы хотите запросить несколько разделов, но не все.
Включение EnableCrossPartitionQuery
Это рекомендуемый подход, если вы хотите запросить все разделы, но в идеале вы хотите использовать его как можно меньше.
CosmosDB знает, является ли определение ключа раздела частью запроса, и ограничит его результаты разделами для этого запроса, если будут предоставлены значения ключа раздела.
Это означает, что если вы напишите что-то вроде select * from c where c.partitionKey = 'something' || c.partitionKey = 'somethingelse'
и вы включаете EnableCrossPartitionQuery
параметры, ваш запрос будет выполняться только для 2 разделов, которые являются частью вашего запроса (something
а также somethingelse
).