我有简单的查询(没有任何where子句)。它返回大约150K文档,每个文档有大约5个字段。要以JSON数组格式获取所有记录,大约需要5-6秒。单个请求可以满足此性能,但我的代码在Java RESTful服务中运行。如果我发送10-15个请求然后性能下降,现在需要一分多钟才能得到响应。
在调查中,我使用查询查询将批量大小设置为5000.这样可以提高50%,但仍然无法接受。
我正在使用带有Java驱动程序的MongoDB 3.4.4。
以下是代码段。
BasicDBObject attributes = new BasicDBObject();
attributes.put("att1", 1);
attributes.put("att2", 1);
attributes.put("att3", 1);
attributes.put("att4", 1);
attributes.put("att5", 1);
attributes.put("att6", 1);
attributes.put("_id", 0);
FindIterable<BsonDocument> dbResult = db.getCollection("mycollection", BsonDocument.class).find().batchSize(1000)
.projection(attributes);
StringBuilder sb = new StringBuilder("[");
for (BsonDocument d : dbResult) {
sb.append(d.toString());
sb.append(",");
}
String result = sb.substring(0, sb.lastIndexOf(",")) + "]";
JsonParser parser = new JsonParser();
JsonArray jsonObject = (JsonArray) parser.parse(result);
我有以下问题。
如何找到优化的批量大小。
在MongoDB API中我无论如何都找不到批量数据,我只能看到可以返回游标的Find方法,我必须逐个遍历所有文档。有什么方法可以进行批量阅读。
一个请求性能良好,如果我发出并发请求,为什么性能会大幅下降?是否有其他方法/参数可以为我优化性能。
Annu