Разница между ключом раздела, указанным в выражении запроса, и параметрами канала в cosmos db

Я вызываю api «queryDocuments (String collectionLink, String query, FeedOptions options)» в базе данных cosmos для выполнения некоторого запроса sql с ключом раздела. Интересно, где я должен указать ключ раздела, строку запроса или параметры канала?

Что касается производительности, мне интересно, следует ли мне указывать ключ раздела в параметре параметров feedoptions.

Подобно разнице queryDocuments (collectionLink, «ВЫБРАТЬ * ОТ корня WHERE id = xxx AND partitionkey = XXX», null); или feedoptions.setpartitionkey (PK); queryDocuments (collectionLink, «ВЫБРАТЬ * ОТ корня WHERE id = xxx», feedoptions);

Спасибо за Ваш ответ!


person Anonymous_coder    schedule 04.06.2019    source источник


Ответы (1)


Я предлагаю вам указать ключ раздела в FeedOptions. Я провел микротест, чтобы понаблюдать за производительностью обоих решений.

Первый:

String name = "A";
FeedResponse<Document> feedResponse = client
      .queryDocuments("dbs/db/colls/part",
                        "SELECT * FROM c WHERE c.name ='" + name + "'", null);
System.out.println(feedResponse.getRequestCharge());

Второй:

FeedOptions queryOptions = new FeedOptions();
PartitionKey partitionKey = new PartitionKey("/A");
queryOptions.setPartitionKey(partitionKey);
FeedResponse<Document> feedResponse1 = client
      .queryDocuments("dbs/db/colls/part",
                    "SELECT * FROM c ", queryOptions);
System.out.println(feedResponse1.getRequestCharge());

Данные испытаний:

введите здесь описание изображения

Выход:

введите здесь описание изображения

Тест показывает, что второй потребляет меньше единиц RU, чем первый. Мои выборочные данные слишком малы, я полагаю, что разрыв между ними будет увеличиваться с увеличением количества данных.

person Jay Gong    schedule 05.06.2019