次の形式の JSON ドキュメントが 1,000 万件以上あります。
["key": "val2", "key1" : "val", "{\"key\":\"val", \"key2\":\"val2"}"]
1 つのファイルで。
JAVA Driver API を使用したインポートには約 3 時間かかりましたが、次の機能 (一度に 1 つの 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 の設定が挿入速度に影響するのではないでしょうか? (たとえば、インデックスとして機能する key : "_id" を追加すると、MongoDB が人工キーを作成して各ドキュメントのインデックスを作成する必要がなくなります) または、挿入時にインデックスの作成をまったく無効にします。ありがとう。