我想在一些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。
您对如何做到这一点有任何建议,或者为什么失败了?