MongoDB Java检索变得非常慢

时间:2015-04-21 02:43:27

标签: java mongodb

我正在运行Java问题,如下所示:

MongoDBManager db = new MongoDBManager(dbName, "FreqUserLog");
List<Object> distinctUIDs = db.getDistinct("uid");

int userNum = 0;
LinkedList<DBObject> samples = new LinkedList<DBObject>();
for( Object uid_obj : distinctUIDs ) {
    System.out.format( "user %d%n", ++userNum );

    BasicDBObject filter = new BasicDBObject();
    filter.put( "uid", String.valueOf(uid_obj) );
    DBCursor cursor = db.findAll(filter);

    /////////////////////////////////////// 
    while( cursor.hasNext() ) {
        DBObject userlog = cursor.next();

        // do nothing temporarily   
    }
    ///////////////////////////////////////
}

背景:程序首先获取不同的用户ID,然后检索每个用户的所有日志。在MongoDB中,有47,000个用户。我将VM变量设置为“-Xms20480m”。

问题:程序最初运行速度非常快(1000个用户为5秒)。但处理完1000个用户后,它会变慢(5个用户为1)。有时这个数字是1300或1900.似乎需要一天时间来处理所有用户日志。我还使用Python + PyMongo编写了一个相同的程序。我遇到了同样的问题。

我还试图评论“/////////////////”之间的块。该计划完成得非常快。每个光标的日志计数大约为200.我不知道问题是什么。

编辑: 我有“uid”和“url”的索引。 日志结构如下:

{"_id": *****
 "url": *****
 "Geo": *****
 "Log count": 3
 "Log0":{
          "event":*****
          "eventcode":*****
          "time": *****
          "ip": *****
          }
  "Log1":{
          "event":*****
          "eventcode":*****
          "time": *****
          "ip": *****
          }
   "Log3":{
          "event":*****
          "eventcode":*****
          "time": *****
          "ip": *****
          }
 }

1 个答案:

答案 0 :(得分:0)

您是否有任何理由为每个不同的uid执行新查询而不使用$ in?您可能需要进行数千次查询才能恢复所有数据。