数据库设计:为PHP网站分离实时和测试数据库

时间:2010-06-29 01:25:56

标签: mysql

我的组织正在从头开始重写我们的数据库驱动网站,包括一个全新的数据库架构。

在当前设置中,实时和测试网站都使用完全相同的数据库。

我们希望下一个版本为网站的实时和测试版本提供单独的数据库。

使用测试中的新架构更改来更新数据库的实时版本不是问题。

问题是实时数据库上的数据不断变化。例如,用户上传图像,修改元数据,创建新对象等等。

使测试服务器上的数据与实时服务器上用户输入的数据保持同步的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

通常,您不会保持同步。测试数据库是一个单独的系统,应该生成其中的数据 - 因此您可以转储它并在不同的测试之间恢复其状态。

每当您更改架构时,都应该针对测试数据库生成“迁移”(由RoR推广,但它们是个好主意)。迁移是ALTER TABLE语句,用于将数据库的布局更新为新架构。然后,您可以在升级时对实时数据库运行迁移。

当然,事先,将真实数据库转储到另一个测试数据库中以确保迁移顺利进行无疑是一个好主意...所以是的。

我将关闭一对数据库,然后开始正确地进行单元测试。如果您正在寻找更加袖手旁观的解决方案,我会将实时数据库复制到测试数据库,并使用cron-job每晚运行您的迁移。

答案 1 :(得分:1)

善于分离生产和测试。

这是一个加载的问题,如果您可以告诉我们您正在使用哪个数据库以及您希望从生产迁移到测试的数据量,我们可能会指出您正确的方向。例如,对于一个相对较小的数据库,您可以将生产中的mysqldump转换为测试数据库实例上的全新数据库。其他解决方案涉及复制,但在配置,运行时和维护方面存在一些开销。

您真的需要为您的测试环境复制生产数据吗?