gpt4 book ai didi

java - 将数百万个 JSON 文档导入 MongoDB 的最快方法

转载 作者:IT老高 更新时间:2023-10-28 13:09:59 24 4
gpt4 key购买 nike

我有超过 1000 万个 JSON 格式的文档:

["key": "val2", "key1" : "val", "{\"key\":\"val", \"key2\":\"val2"}"]

在一个文件中。

使用 JAVA Driver API 导入大约需要 3 个小时,同时使用以下功能(一次导入一个 BSON):

public static void importJSONFileToDBUsingJavaDriver(String pathToFile, DB db, String collectionName) {
// open file
FileInputStream fstream = null;
try {
fstream = new FileInputStream(pathToFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("file not exist, exiting");
return;
}
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

// read it line by line
String strLine;
DBCollection newColl = db.getCollection(collectionName);
try {
while ((strLine = br.readLine()) != null) {
// convert line by line to BSON
DBObject bson = (DBObject) JSON.parse(JSONstr);
// insert BSONs to database
try {
newColl.insert(bson);
}
catch (MongoException e) {
// duplicate key
e.printStackTrace();
}


}
br.close();
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}


}

有没有更快的方法?也许,MongoDB 设置可能会影响插入速度? (例如,添加将用作索​​引的键:“_id”,以便 MongoDB 不必为每个文档创建人工键和索引)或在插入时完全禁用索引创建。谢谢。

最佳答案

很抱歉,你们都选择了较小的性能问题,而不是核心问题。将逻辑与读取文件和插入分开是一个小收获。以二进制模式(通过 MMAP)加载文件是一个小收获。使用 mongo 的批量插入是一个很大的收获,但仍然没有骰子。

整个性能瓶颈是 BSON bson = JSON.parse(line)。或者换句话说,Java 驱动程序的问题是它们需要从 json 到 bson 的转换,而这段代码似乎非常慢或实现得很糟糕。通过 JSON-simple 或特别是通过 JSON-smart 的完整 JSON(编码+解码)比 JSON.parse() 命令快 100 倍。

我知道 Stack Overflow 在此框上方告诉我我应该回答答案,但我没有,但请放心,我仍在寻找此问题的答案。我无法相信所有关于 Mongo 性能的讨论,然后这个简单的示例代码就失败了。

关于java - 将数百万个 JSON 文档导入 MongoDB 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19638845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com