MongoDb-通过Java导入具有一百万条记录的大型Json文件-内存不足错误

时间:2018-10-25 15:06:23

标签: java json mongodb import

我正在尝试使用以下Java API将具有约100万条记录的json文件导入MongoDb,并且我正在获取Java.lang.OutOfMemoryError:Java堆空间。我尝试在eclipse设置中增加Java堆空间,但仍然遇到相同的错误。如果json中的总记录少于500k,则程序运行正常,没有任何问题。但是,一旦json文档中的记录超过60万,我就会收到此错误。我能够从命令提示符通过mongoimport导入相同的json文件,而没有任何问题。谁能帮助我修复此程序,以便我可以使用Java应用程序将大数据集导入mongo。

MongoClient client = new MongoClient("localhost", 27017);
MongoDatabase database = client.getDatabase("Sample");
MongoCollection<Document> collection = database.getCollection("Sample_690000");

int count = 0;
int batch = 10000;

List<InsertOneModel<Document>> docs = new ArrayList<>();

try(BufferedReader br = new BufferedReader(
    new FileReader("C:\\\\CsvFiles\\SampleDataJSON690000.json"))) {
    String line;
        while((line = br.readLine()) != null) {
            Document document = Document.parse(String.format("{\"a\": %s}", line));

            for(Document doc : (ArrayList<Document>)document.get("a")) {
                docs.add(new InsertOneModel<>(doc));
                count++;
            }
            if(count == batch) {
                collection.bulkWrite(docs, new BulkWriteOptions().ordered(false));
                docs.clear();
                count = 0;
        }
    }
}
if(count > 0) {
    collection.bulkWrite(docs, new BulkWriteOptions().ordered(false));
}

0 个答案:

没有答案