使用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成本。