java - 从 MongoDB 中选择随机键

标签 java mongodb benchmarking nosql

我正在尝试将大量数据插入 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();
      }

最佳答案

  1. 您的索引适合 RAM 吗?如果不是,MongoDB 将非常不高兴(=慢)。

    > db.collection.totalIndexSize()
    
  2. 要使其成为仅扫描/覆盖索引的索引,请使用以下命令:

    BasicDBObject query = new BasicDBObject("key",true).append("_id",false);
    

关于java - 从 MongoDB 中选择随机键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24682684/

相关文章:

java - 使用 jsoup 获取 URL 的子链接

node.js - Nodejs表达如何将响应发送回浏览器

clojure - 内存不足错误: GC overhead limit exceeded Criterium

java - 我想用 java 对 solaris 和 linux 进行基准测试

java - 为什么 Java 中 try/catch 与其他形式的控制流的性能存在差异?

java - 如何使用 Selenium 和 Java 打印从网页获取的带有空格分隔符的提取文本

java - 仅获取响应代码而不是 url 的完整来源

Java : ArrayList<HashMap<Integer, 整数>>

mongodb - 是否可以创建一个 Mongoose Hook 以将投影应用于所有查询

c++ - valgrind 使用 GENOID 创建的简单 BSON 对象报告 BSONObj::toString 中未初始化的值