git - MongoDB 备份为文本而不是用于源代码控制的二进制文件

标签 git mongodb version-control automation

这有可能吗?

我问的原因是,执行备份作为预提交 Hook 似乎很有用,并以某种方式将基于文本的备份包含在提交的代码中,这样源代码管理 (git) 中的每个修订版都有与之相关的必要备份。

我意识到可以让 MongoDB 将其所有集合作为 JSON 输出,并以这种方式备份它们,但这不会包含数据库和集合元数据。

主要关注点是,当分支以更改服务器端代码,然后恢复该分支时,我们很容易忘记进行必要的备份以允许有效恢复(代码将不再匹配模式)。有人可能会说这是程序员的错误,但我认为应该有一些自动化措施来确保我们拥有的数据库版本对于每个代码版本都是最新的。这是项目早期无定形模式的问题……动态模式是 Mongo 的主要祝福和诅咒。

最佳答案

MongoDB 将其数据存储在 BSON (Binary JSON) format 中因此,如果您要转换为纯文本格式,您应该注意潜在的 data type fidelity问题。如果你想对你的 MongoDB 数据库进行一致的备份,推荐的格式是 mongodump 的二进制输出。 .不过,我不建议使用二进制数据库备份来膨胀你的 git 存储库。

通常,具有架构灵 active 的数据库的解放方面之一是不必在开发过程中担心架构迁移。这确实需要考虑您的应用程序将如何处理不同的模式版本,因此采用更受控制的方法也很好。

由于您的主要目标是使数据库模式与代码更改保持同步,因此更好的方法是研究模式迁移工具。这些通常允许您创建具有定义的数据库应用程序顺序的升级/降级代码片段,并确保您的应用程序代码未处理的数据库模式的任何更改都在迁移脚本。

一些示例工具:

关于git - MongoDB 备份为文本而不是用于源代码控制的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20814866/

相关文章:

objective-c - 将静态库添加到 XCode 4 项目会破坏 "build and archive"功能

git - 如何在intelliJ IDEA中进行git review?

javascript - 如何使用 Passport.js 循环遍历用户并将用户列表打印到 DOM 中

git - 仅在有更改时如何让 Jenkins git 提交?

javascript - NodeJs 中的变量值是否可以为 "save"?

c# - mongodb中的授权

git merge master into development 分支是覆盖,不是 merge

sql-server - Redgate SQL Source Control 推荐的开发-测试-实时数据库工作流程

git + 部署到生产环境

没有缩进空格的git分支输出? (除了正则表达式操作)