从mongoDB批量阅读

时间:2017-07-31 10:35:53

标签: java mongodb performance mongodb-query

我有简单的查询(没有任何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);

我有以下问题。

  1. 如何找到优化的批量大小。

  2. 在MongoDB API中我无论如何都找不到批量数据,我只能看到可以返回游标的Find方法,我必须逐个遍历所有文档。有什么方法可以进行批量阅读。

  3. 一个请求性能良好,如果我发出并发请求,为什么性能会大幅下降?是否有其他方法/参数可以为我优化性能。

  4. Annu

0 个答案:

没有答案