Azure cosmos DB在文档大小约为30KB时速度较慢
我们有一个azure cosmos DB,具有以下特征:Azure cosmos DB在文档大小约为30KB时速度较慢,azure,azure-cosmosdb,azure-cosmosdb-mongoapi,Azure,Azure Cosmosdb,Azure Cosmosdb Mongoapi,我们有一个azure cosmos DB,具有以下特征: 大约200万份文件 每个文档大约30KB 当我们使用JavaMongoAPI查询COSMOSDB时 (org.mongodb:mongodb驱动程序同步:3.9.1) 使用shard键检索4000个文档(据我所知应该是最快的),需要2分钟以上的时间 这是常见的吗 我应该期望从API获得这些时间吗 示例代码: collection = <... init the collection> final Bson filters =
org.mongodb:mongodb驱动程序同步:3.9.1
)
使用shard键检索4000个文档(据我所知应该是最快的),需要2分钟以上的时间
这是常见的吗
我应该期望从API获得这些时间吗
示例代码:
collection = <... init the collection>
final Bson filters = Filters.or(Filters.eq("shardKey", "key1"), Filters.eq("shardKey", "key2"));
long pre = System.currentTimeMillis();
logger.info("filter {}", filters);
List<Document> documents = new ArrayList<>();
FindIterable<Document> iterator = collection.find(filters);
try (MongoCursor<Document> cursor = iterator.iterator()) {
while (cursor.hasNext()) {
Document e = cursor.next();
documents.add(e);
}
}
logger.info("Got {}, time: {}", documents.size(), (System.currentTimeMillis() - pre));
集合=
最终Bson过滤器=过滤器。或(filters.eq(“shardKey”、“key1”)、filters.eq(“shardKey”、“key2”);
long pre=System.currentTimeMillis();
info(“filter{}”,filters);
列表文档=新建ArrayList();
FindItemerable迭代器=collection.find(过滤器);
try(MongoCursor=iterator.iterator()){
while(cursor.hasNext()){
文档e=游标.next();
文件.添加(e);
}
}
info(“Got{},time:{}”,documents.size(),(System.currentTimeMillis()-pre));
客户机似乎以大约100项为一批检索文档。
有没有办法增加批量
使用Azure门户时,门户中的界面将对调用进行分页,并仅检索前100个文档,然后您必须单击“带来更多”以获取更多文档。对于azure界面,检索每个批处理似乎也需要大约2秒钟的时间
我有什么办法让它工作得更快?
谢谢据我所知,您无法增加mongo库的大小,因为他们不知道CosmosDB需要的请求选项。您是否尝试将此查询限制为单个分区键,并查看其在性能方面的效果?使用单个部分键(shard key)并没有加快查询速度,我们使用projection()方法仅获取文档的一部分,这确实加快了响应速度。由于我们使用PojoCodecProvider,我们必须创建一个新的实体类,该类将适合从API返回的“投影”文档。据我所知,mongo库无法增加大小,因为它们不知道CosmosDB需要的请求选项。您是否尝试将此查询限制为单个分区键,并查看其在性能方面的效果?使用单个部分键(shard key)并没有加快查询速度,我们使用projection()方法仅获取文档的一部分,这确实加快了响应速度。由于我们使用PojoCodecProvider,我们必须创建一个新的实体类,该类将适合从API返回的“投影”文档