我正在运行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": *****
}
}
答案 0 :(得分:0)
您是否有任何理由为每个不同的uid
执行新查询而不使用$ in?您可能需要进行数千次查询才能恢复所有数据。