Каков рекомендуемый способ запроса документов из разных разделов в CosmosDB?

При использовании Azure Cosmos DB и запросе одного раздела я просто указываю ключ раздела в FeedOptions. Но когда мне нужно запросить n разделов, у меня есть (afaik) 2 варианта:

  1. Запустите отдельную задачу для каждого раздела и объедините результат в код моего приложения
  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).

Другие вопросы по тегам