我正在尝试将大量数据插入 MongoDb 并从集合中检索随机键值。插入大约 2GB 的数据大约需要 29 分钟,检索键值对需要几个小时。与其他 NoSQL 数据存储相比,这非常慢。可能的瓶颈是什么。
插入
while ((strLine = br.readLine()) != null) {
documentDetail.clear();
//String strLines = strLine.replaceAll("[-+.^:,]","");
tokens = strLine.split("\t");
documentDetail.put("key", tokens[0]);
documentDetail.put("value", tokens[1]);
start = System.currentTimeMillis();
collection.insert(documentDetail);
elapsed = System.currentTimeMillis()-start;
totalElapsed += elapsed;
}
BasicDBObject index = new BasicDBObject();
index.put("key", 1);
index.put("value", 1);
collection.ensureIndex(index);
选择
BasicDBObject find = new BasicDBObject();
find.put("value", 1);
while ((strLin = br.readLine()) != null) {
BasicDBObject query = new BasicDBObject();
query.put("key", strLin);
System.out.println(strLin);
start = System.currentTimeMillis();
DBCursor cursorDoc = collection.find(query, find);
while (cursorDoc.hasNext()) {
System.out.println(cursorDoc.next());
}
elapsed = System.currentTimeMillis()-start;
totalElapsed += elapsed;
System.out.println("Reading Ends...");
//field.clear();
}
最佳答案
您的索引适合 RAM 吗?如果不是,MongoDB 将非常不高兴(=慢)。
> db.collection.totalIndexSize()
要使其成为仅扫描/覆盖索引的索引,请使用以下命令:
BasicDBObject query = new BasicDBObject("key",true).append("_id",false);
关于java - 从 MongoDB 中选择随机键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24682684/