Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoDB VS获取大量文档_Java - Fatal编程技术网

Java MongoDB VS获取大量文档

Java MongoDB VS获取大量文档,java,Java,我目前使用的是关系数据库(Oracle),目前正在试用MongoDB 我正在使用Java驱动程序从MongoDB的本地实例查询和获取数据。示例代码如下所示: MongoClient mongoClient = new MongoClient(); MongoDatabase db = mongoClient.getDatabase("test"); MongoCollection<Document> restoCollection = db.getCollection("resta

我目前使用的是关系数据库(Oracle),目前正在试用MongoDB

我正在使用Java驱动程序从MongoDB的本地实例查询和获取数据。示例代码如下所示:

MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("test");

MongoCollection<Document> restoCollection = db.getCollection("restaurants");

Document irishCuisineFilter = new Document("cuisine", "Irish");
FindIterable<Document> iterable = restoCollection.find(irishCuisineFilter);

iterable.forEach(new Block<Document>() {
    @Override
    public void apply(final Document document)  {
        System.out.println(document);
    }
});
MongoClient MongoClient=new MongoClient();
MongoDatabase db=mongoClient.getDatabase(“测试”);
MongoCollection restoCollection=db.getCollection(“餐厅”);
文档irishCuisineFilter=新文档(“烹饪”、“爱尔兰”);
findItemerable=restoCollection.find(irishCuisineFilter);
iterable.forEach(新块(){
@凌驾
公开作废申请(最终文件){
系统输出打印项次(文件);
}
});
“餐厅”集合中的文档总数为1343082。find查询最终生成71918


我最初的假设是,上述情况将非常迅速。然而,forEach循环大约需要16秒才能完成。这违背了我当初选择MongoDB的目的。我想要的东西,将使数据查询和抓取都非常快。这是一个错误的假设吗?我遗漏了什么吗?

问题:MongoDB与获取大量文档相比

解决方案:索引

除了提高代码效率外,我们还应该提高MongoDB处理大数据的读取效率。虽然上面提到的记录总数(1343082)并不是那么多,但为MongoDB编制索引将提高查询速度

索引支持查询的高效解析。如果没有索引,MongoDB必须扫描集合中的每个文档,以选择与查询语句匹配的文档。此扫描效率极低,需要mongodb处理大量数据

文件:

请在不调用system.out.println()并计算for循环时间的情况下尝试同样的方法,好吗?@newbiee已经尝试过了。循环本身大约需要16秒。瓶颈不在于打印文档,而在于循环本身。这就是我不明白的,也许你可以试着在烹饪领域设置一个索引,而不是尝试
db.getCollection(“餐厅”).find(eq(“烹饪”、“爱尔兰”)(发件人:)?@Fildor是。没有区别!我在烹饪领域创建了一个索引,但它仍然和以前一样慢。另一方面,当我对MonogoCollection发出count()方法时,我会得到过滤项目的数量。因此,看起来过滤速度很快,但浏览文档的速度很慢