数据库迁移,数据已存在于生产数据库中

时间:2014-10-22 16:21:25

标签: mongodb postgresql migration production

我对迁移知之甚少,但这是一个我不确定如何回答的具体问题。

在生产中,当存在用户数据时,如何更改数据库格式/架构? (对于MongoDB上的Meteor应用程序和我们的主Postgres数据库,答案是否有所不同?)基本上,如果您编写引入新字段的新代码以及期望存在新字段的新代码,那么系统将无法正常工作从转换前的数据库中提取数据。

至少对于Mongo来说,一个可能的解决方案是编写一个脚本来更新数据库布局及其中的数据,但我想知道这对于生产数据库是否太容易出错,而且当你只是不这样做时这是不可行的。有必要的信息(比如你以前没有从用户那里收集某个信息字段。)

2 个答案:

答案 0 :(得分:1)

我不是Postgres专家,但在经典的关系数据库案例中,如果未填充(NULL,其他),则会更改模式并为字段设置默认值。然后,通常,您编写代码来处理字段中的null / default值,或者您进行批量更新以适当地填充字段。

使用MongoDB,您可以执行相同的操作,但不需要(可能很昂贵的)ALTER命令来更改架构或默认设置,您可以在适当时添加字段(当您添加或更新文档用于其他目的)。

基本上,你懒得添加字段,不用担心没有它的文档。您可以编写处理缺少字段的代码(例如,如果不存在则添加默认值),而不是编写代码来处理default / null值。如果您要定期执行此操作或者架构更改特别昂贵,那么这是一个微妙但重要的区别。这个Craigslist presentation(陈旧但很好)给出了一个很好的现实世界的例子,这个类型的东西也是如此(后来有人也在谈论经验教训。

答案 1 :(得分:1)

至于Postgres数据库迁移:您可能需要查看liquibase。它功能丰富,易于用户,迁移scriptlet随源代码一起保存。