【问题标题】:Read mongodump manually手动读取 mongodump
【发布时间】:2020-04-28 04:57:29
【问题描述】:

我有一个由 mongodump 实用程序创建的大型转储文件,例如“test.dump”。我想从这个转储中得到一个准确的集合,然后手动将其读入内存,以便作为有效的 BSON 文档进行进一步处理。由于它的大小,我无法在内存中加载完整转储。

我不需要对 mongo 实例进行物理恢复!我基本上什至都没有启动和运行。所以 mongorestore 实用程序只有在可以帮助我将我的集合从转储文件读取到内存时才能成为一个解决方案。

我正在使用 Python 3 和 pymongo,但可以在必要时导入其他第三方库或启动任何 CLI 实用程序并显示标准输出结果。

【问题讨论】:

    标签: python mongodb pymongo mongodump mongorestore


    【解决方案1】:

    我不熟悉任何可以从转储文件中提取集合的现成工具。也就是说:

    • AWS 提供具有近 4 TB 内存的 x1e.32xlarge 实例类型。你的垃圾场到底有多大?
    • 当然,最简单的解决方案是将转储加载到 MongoDB 部署中(如果要转储一个集合,则不需要太多内存或其他资源)。现在硬件非常便宜。
    • BSON 格式并不复杂。我希望您需要自己为此编写工具,但如果转储实际上是有效的 BSON,您可以使用 BSON 读取代码手动遍历它,该代码是每个 MongoDB 驱动程序的一部分。

    【讨论】:

    • 是的,我一直在尝试遍历,但还没有成功。 mongodump 的 --archive 和 --gzip 参数有 smth,所以我的二进制数据不是有效的 BSON。我试图找到 mongodump 操作结果的规范,但也一无所获。关于硬盘空间 - 这不是问题,你是对的。但是对于任何只有转储和 python 脚本(或其他工具)的集合,我都需要可重复的解决方案。有一次我可以用手和复制粘贴使用 mongo+mongorestore 来完成。
    • 我也不知道有没有规范,你最好的选择可能是阅读源代码。
    【解决方案2】:

    使用 mongorestore 上的 --nsInclude 标志仅恢复您感兴趣的一个集合。例如

    mongorestore --nsInclude=<DatabaseName>.<CollectionName>
    

    【讨论】:

    • 我熟悉--nsInclude,但需要在内存中获取数据,或者至少需要在标准输出中获取数据。带有 --nsInclude 的 mongorestore 会将数据应用于实际的 mongo 实例,但我不需要这个。我有启动 mongo 实例的解决方法,但这对我来说非常不方便。
    • 为了避免精神错乱,只需启动一个 mongo 实例。这是 docker 的一个命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多