我在cosmos db中调用“ queryDocuments(String collectionLink,String query,FeedOptions options)” api,以使用分区键进行一些SQL查询。我想知道应该在哪里指示分区键,查询字符串或feedoptions?

在性能方面,我想知道是否应该在feedoptions options参数中指示分区键

喜欢差异
queryDocuments(collectionLink,“ SELECT * FROM root WHERE id = xxx AND partitionkey = XXX”,空);
要么
feedoptions.setpartitionkey(PK);
queryDocuments(collectionLink,“ SELECT * FROM root WHERE id = xxx”,feedoptions);

感谢您的回答!

最佳答案

我建议您在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());


测试数据:

java - 查询表达式中指示的分区键与cosmos db中的feedoptions之间的区别-LMLPHP

输出:

java - 查询表达式中指示的分区键与cosmos db中的feedoptions之间的区别-LMLPHP

测试表明第二个消耗的RU低于第一个消耗的RU,我的样本数据太小,我认为它们之间的差距会随着数据的增加而增加。

08-06 21:22