gpt4 book ai didi

java - MongoDB - 在内存中保存 DBCursor 时对数据库进行更改

转载 作者:行者123 更新时间:2023-12-01 12:07:09 25 4
gpt4 key购买 nike

这应该是一个简单的问题,但我在任何地方都找不到答案。

我想通过在对集合进行更改之前将其加载到内存中来对集合进行快照。然后我想将快照与新更新的集合进行比较。

我的问题是,如果我加载 DBCursor snapshot = table.find();进入内存并且数据库发生变化,我的快照引用会受到影响吗?

我基本上是在问 DBCursor 对象是否保存内存中的所有信息,或者只是保存对集合的引用。

最佳答案

您可以迭代光标并在本地保存每个文档,但对于大量文档来说,这会占用大量内存。您可以检索文档并将它们存储回另一个集合,例如

db.coll.find().forEach( function(doc){db.coll2.insert(doc)} )

这使您摆脱了保存文档的内存开销,但您仍然拥有拉出和推回所有文档的所有网络 I/O。

要将所有工作放在服务器端,您可以使用 db.collection.copyTo()制作临时快照集合。但请务必阅读警告 - 它需要全局锁定。这在生产环境中可能是 Not Acceptable ,因为它可能会阻止服务器上的所有其他操作。

最后一个选择是使用 mongodump/mongorestore 转储集合并将其恢复到不同的集合。这需要运行其他二进制文件,但如果 mongodump/mongorestore 在 mongod 本地运行,它将是最快的。

关于java - MongoDB - 在内存中保存 DBCursor 时对数据库进行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27510765/

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