【发布时间】:2009-10-27 00:45:59
【问题描述】:
我正在开发一个 SaaS 项目,该项目将让每个客户都有一个应用程序实例(customer1.application.com、customer2.application.com 等),理想情况下,每个客户都将拥有自己的“自己”空间数据库。当前的计划是为每个客户创建一个数据库,并将应用程序的一个实例部署到网络场中。这个想法是每个客户都可以选择退出升级以维持现状(我们的一位投资者真正想要的,很大程度上是因为他讨厌 Facebook 如何不断改变它的工作方式。)
昨晚我尝试向我的两个测试帐户推出更改数据库的更新。虽然随后引起的错误是我的错(忘记了 DDL 中一个很小但显然非常重要的更改),但我开始担心我的整体操作理论,因为缺少一个 ALTER COLUMN 语句和整个升级周期可能会被吹到地狱。因此,经过这么长时间的积累,这是我的问题:
1) 有没有办法在两个数据库(“测试”生产数据库和实际生产数据库)之间进行差异,以准确记录所做的每个更改?
2) 我应该考虑其他数据库(和/或应用程序)设计模型吗?我知道,如果我取消对应用程序的多个版本的支持,我实际上会消除很多长期支持方面的麻烦。
【问题讨论】:
-
您只需要一个更好的测试策略。您不应将未经测试的更改应用于生产数据库。
-
我没有真正的生产数据库,我目前正在研究我的部署方法,并且我已经建立了两个测试客户帐户来测试升级过程。
-
我想指出,SQL Diff 解决方案不能可靠地涵盖架构升级期间经常发生的数据更改。如果您添加一列,那么通常您可以同时使用一些计算数据填充它。 SQL diff(虽然有用)在实时数据库中进行大的更改是不安全的。
-
@Glen:根据 Code Complete,cc2e.com,最好的测试人员在任何部署中最多发现 20% 的错误。因此,虽然添加测试可以提高质量,但这并不是保证。您必须将收益与成本进行比较。
标签: sql-server