使用SQL API,您可以在SQL语句中指定分区键,例如SELECT * FROM c WHERE c.MyPartitionKey = 'KeyValue'或使用FeedOptions.PartitionKey

它们是等效的还是一种方法的RU成本较低?

我已经尝试了两种方法,都看不出有什么区别,但是数据集很小,并且随着数据的增长可能会改变。

最佳答案

我做了一些测试。

测试一:100份文件

for (int i = 1; i <=100 ; i++) {
     Document doc = new Document();
     doc.setId(i + "");
     if(i%2 == 0)
        doc.set("name", "white");
     else
        doc.set("name", "black");
     documentClient.createDocument("dbs/db/colls/part", doc, null, true);
     System.out.println("insert document No. " + i);
}


查询1:

String sql ="SELECT * FROM c where c.name='black'";
FeedOptions options = new FeedOptions();
FeedResponse<Document> queryResults = documentClient.queryDocuments("dbs/db/colls/part",sql,options);
System.out.println(queryResults.getRequestCharge());


结果:17.44 RUs



查询2:

FeedOptions options = new FeedOptions();
PartitionKey partitionKey = new PartitionKey("black");
options.setPartitionKey(partitionKey);
String sql ="SELECT * FROM c";
FeedResponse<Document> queryResults = documentClient.queryDocuments("dbs/db/colls/part",sql,options);
System.out.println(queryResults.getRequestCharge());


结果:17.44 RUs

测试二:1000份文件

for (int i = 1; i <=1000 ; i++) {
         Document doc = new Document();
         doc.setId(i + "");
         if(i%2 == 0)
            doc.set("name", "white");
         else
            doc.set("name", "black");
         documentClient.createDocument("dbs/db/colls/part", doc, null, true);
         System.out.println("insert document No. " + i);
}


查询1和2都是31.57 RU

如该article中所述,RUS与操作文档的大小或并发吞吐量有关。上面两个查询结果集没有什么不同,因此它们应具有相同的RU成本。

10-08 01:26