Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git MongoDB备份作为文本而不是二进制进行源代码控制_Git_Mongodb_Version Control_Automation - Fatal编程技术网

Git MongoDB备份作为文本而不是二进制进行源代码控制

Git MongoDB备份作为文本而不是二进制进行源代码控制,git,mongodb,version-control,automation,Git,Mongodb,Version Control,Automation,有可能这样做吗 我询问的原因是,将备份作为预提交挂钩来执行似乎很有用,并以某种方式将基于文本的备份包括在提交的代码中,以便源代码管理(git)中的每个修订版都有与之相关联的必要备份 我意识到,可以让MongoDB将其所有集合作为JSON输出,并以这种方式进行备份,但这样就不会包含DB和集合元数据 中心问题是,当分支对服务器端代码进行更改,然后恢复该分支时,我们很容易忘记进行必要的备份,以便进行有效的恢复(代码将不再与架构匹配)。有人可能会说这是程序员的错误,但我认为应该有一些自动化,以确保我们有

有可能这样做吗

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

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


中心问题是,当分支对服务器端代码进行更改,然后恢复该分支时,我们很容易忘记进行必要的备份,以便进行有效的恢复(代码将不再与架构匹配)。有人可能会说这是程序员的错误,但我认为应该有一些自动化,以确保我们有一个数据库版本,该版本适用于每个版本的代码。这就是在项目早期没有定形的模式的问题。。。动态模式是Mongo的主要幸灾乐祸。

MongoDB将其数据存储在一个文件中,因此如果您要转换为纯文本格式,您应该注意潜在的问题。如果希望对MongoDB数据库进行一致性备份,建议使用的二进制输出格式。不过,我不建议使用二进制数据库备份来扩充git回购

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

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

一些示例工具:


@Calimero什么都没有。在我开始浪费时间走那些没有出路的老路之前,我会征求意见,因为这不是我的专业领域。在每次提交代码之前备份完整的数据库听起来是一个极端的要求。更典型的做法是在部署之前备份数据库,而不是作为预提交挂钩。您是仅尝试备份集合/索引定义,还是同时备份完整数据?MongoDB以文本格式存储其数据,因此如果您正在转换为纯文本格式,您应该注意潜在的问题。我不建议用数据库备份来膨胀你的git回购。@Stennie谢谢你的输入。最主要的问题是,当分支对服务器端代码进行更改,然后恢复该分支时,我们很容易忘记进行必要的备份,以便进行有效的恢复(代码将不再与模式匹配)。有人可能会说这是程序员的错误,但我认为应该有一些自动化,以确保我们有一个数据库版本,该版本适用于每个版本的代码。这就是在项目早期没有定形的模式的问题。。。这是蒙哥的主要祝福和诅咒。你能详细说明一下这到底是怎么回事吗。我不确定我是否掌握了这个迁移工具的核心概念。您所说的“定义的应用程序顺序”是什么意思?可以说,这与为了在“阶梯”版本上下移动而增量应用补丁程序相比吗?所以为了使用这个,我们会,什么,检查当前的版本代码,然后对它应用几个补丁,以便让它返回到最后一个标记的API版本,然后用该标记的备份刷新数据库,所有事情都应该正常工作?@NickWiggill:是的,我想你已经有了这个概念。迁移通常需要按定义的顺序应用,以便它们可以是已知数据库状态之间的转换(即版本阶梯的上/下)。通常需要运行一个命令来将模式从当前状态同步到所需状态。