如何在Java集合中存储400万个MongoDB文档

时间:2017-03-14 20:47:53

标签: java mongodb arraylist collections

我想在一些Java集合中存储大约400万个MongoDB文档(服务器上为682 MB),以将其用作内存缓存的Mongo-Collection。我查询的其他一些文档引用了这些文档,我需要名称字段才能继续。要查询每个引用的文档以获取这些字段是非常昂贵的,所以我只是尝试将它们放入带有

的ArrayList中
someMongoCollection.find().into(new ArrayList<>())

根本不起作用。一旦java进程的内存使用量达到3.35 GB,该进程就不再响应了。

我的下一个尝试是批量获取文件20000并将其添加到while循环中的ArrayList中。同样的事情,但是这次我可以看到它在崩溃之前已经向ArrayList添加了大约300万个文档。

我的最后一次尝试与之前的尝试类似,但是我将文档分成两个ArrayLists,每个文件应该包含200万个文档,但它不知何故有效,但我不认为这是一个正确的解决方案,因为我只尝试过出于好奇。

要存储的文档格式如下:

{
    "_id" : ObjectId("123412341234123412341234"),
    "name" : "Some Text / Some Text / Some Text / Some Text",
    "ref" : DBRef("ref", ObjectId("555566665555666655556666")),
    "cat" : "foo"
}

我使用MongoDB 3.4和匹配的Java-Drivers。

您对如何做到这一点有任何建议,或者为什么失败了?

0 个答案:

没有答案