Должен ли запрос содержать ключ раздела, если мы уже установили ключ раздела в FeedOption? - PullRequest
0 голосов
/ 28 августа 2018

Я использую Document DB с ключом раздела = "deviceId". Есть ли разница между двумя кодами ниже:

var fo = new FeedOption{ PartitionKey= new PartitionKey("A1234") };
var partitionKeyInQuery= dbClient.CreateDocumentQuery(d => d.deviceId = "A1234" and d.type==1, fo);
var noPartitionKeyInQuery = dbClient.CreateDocumentQuery(d => d.type==1, fo);

Когда PartitionKey применяется в FeedOption, я должен добавить «deviceId» в предложении WHERE?

1 Ответ

0 голосов
/ 28 августа 2018

Я считаю, что нет разницы в производительности. RequestCharge такой же, а предложение where делает раздел запроса специфичным, т. Е. Исключает перекрестный запрос.

Из документации:

Запрос разделенных контейнеров

Когда вы запрашиваете данные в многораздельных контейнерах, Cosmos DB автоматически направляет запрос в разделы, соответствующие значениям ключа раздела, указанным в фильтре (если они есть) . Например, этот запрос направляется только на раздел, содержащий ключ раздела «XMS-0001».

// Query using partition key
IQueryable<DeviceReading> query = client.CreateDocumentQuery<DeviceReading>(
    UriFactory.CreateDocumentCollectionUri("db", "coll"))
    .Where(m => m.MetricType == "Temperature" && m.DeviceId == "XMS-0001");

https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-partition-data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...