如何在生产环境中修改数据库模式
How to modify database schema on production
当我开始一个敏捷过程的项目时,我的数据库没有完整的 DER,我如何对 table 中已经有生产数据的数据进行更改。例如:
有table个costumers products和sales,在开始时sales table只有列id,costumerId,productId和quantity。但将来我们需要更改此 table,例如添加一个新列 employeeId 和该数量,该数量为 float 的整数。我可以在生产数据库上进行此更改还是需要创建中间件 table 以不接触真实数据?
我举了一个简单的例子,但想一想更大的事情,通过一些冲刺但没有人看到依赖......在这种情况下如何行动?
此致!
这是一个常见问题。
有几种方法,其中一些取决于所使用的 DBMS。
关键提示:
- 不要对数据库中的元数据进行向后不兼容的更改。这意味着您可以将字段添加到 table,但不能删除它并且(视情况而定)您不能重命名它。
- 如果你改变了字段的类型,那么实际上,你增加了一个新的字段,必须要解决数据迁移的问题。这种解决方案的可能性及其实施方式取决于数据量。在数百万条记录上,这不是问题。特别是如果您的系统没有 SLA 99999。
- 第 1 段的结果。如果您向元数据添加了一些内容,那么您不应在提交工作负载后回滚这些更改。
- 您必须了解并使用数据库的功能。
例如,Oracle 具有在不同结构的方案版本之间切换的能力。
您也可以使用视图在多个 table 上创建外观。它甚至可能支持 DML。
- 尝试创建一个提升您的数据库和应用程序版本的计划。
在常见情况下,您有数据库和一些使用该数据库的应用程序。它们关系中的更新数据库和应用程序的顺序高度依赖于您的系统架构和 SLA。如果你可以有停机时间,那就容易多了,如果没有,那就是个问题了。
您可能希望独立于您的数据库更新和回滚您的应用程序。在这种情况下,您必须在升级数据库版本时提供向后兼容性。新 DB 为新 APP 更改 "can wait"。
当我开始一个敏捷过程的项目时,我的数据库没有完整的 DER,我如何对 table 中已经有生产数据的数据进行更改。例如:
有table个costumers products和sales,在开始时sales table只有列id,costumerId,productId和quantity。但将来我们需要更改此 table,例如添加一个新列 employeeId 和该数量,该数量为 float 的整数。我可以在生产数据库上进行此更改还是需要创建中间件 table 以不接触真实数据?
我举了一个简单的例子,但想一想更大的事情,通过一些冲刺但没有人看到依赖......在这种情况下如何行动?
此致!
这是一个常见问题。 有几种方法,其中一些取决于所使用的 DBMS。
关键提示:
- 不要对数据库中的元数据进行向后不兼容的更改。这意味着您可以将字段添加到 table,但不能删除它并且(视情况而定)您不能重命名它。
- 如果你改变了字段的类型,那么实际上,你增加了一个新的字段,必须要解决数据迁移的问题。这种解决方案的可能性及其实施方式取决于数据量。在数百万条记录上,这不是问题。特别是如果您的系统没有 SLA 99999。
- 第 1 段的结果。如果您向元数据添加了一些内容,那么您不应在提交工作负载后回滚这些更改。
- 您必须了解并使用数据库的功能。 例如,Oracle 具有在不同结构的方案版本之间切换的能力。 您也可以使用视图在多个 table 上创建外观。它甚至可能支持 DML。
- 尝试创建一个提升您的数据库和应用程序版本的计划。 在常见情况下,您有数据库和一些使用该数据库的应用程序。它们关系中的更新数据库和应用程序的顺序高度依赖于您的系统架构和 SLA。如果你可以有停机时间,那就容易多了,如果没有,那就是个问题了。 您可能希望独立于您的数据库更新和回滚您的应用程序。在这种情况下,您必须在升级数据库版本时提供向后兼容性。新 DB 为新 APP 更改 "can wait"。