数据库设计:PHP 网站的独立实时数据库和测试数据库

Posted

技术标签:

【中文标题】数据库设计:PHP 网站的独立实时数据库和测试数据库【英文标题】:Database Design: Separate Live and Test databases for PHP Website 【发布时间】:2011-03-09 09:52:37 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

很好地分离生产和测试。

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

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

【讨论】:

数据库是 MySQL 5.1,大小约为 1 GB。尽管我们只会迁移其中的一小部分。但是数据的大小不是问题,对我们来说它是频率。在高峰时段,我们每分钟看到大约 1,000 次更新,我一直在寻找一种方法让它们始终保持同步。我能想到的唯一真正的方法是将每个实时服务器查询发送到测试服务器,这对我来说似乎很荒谬。但是在你的问题和 Frio 的评论之后,我想知道是否真的有必要让测试数据库与实时数据库保持同步。

以上是关于数据库设计:PHP 网站的独立实时数据库和测试数据库的主要内容,如果未能解决你的问题,请参考以下文章

php网站的独立文件服务器

PHP保留URL参数表单页面

需要从外部服务器进行实时轮询的网站架构设计

共享照片网站的数据库设计?

新闻网站大数据项目

实时聊天、消息处理 - Socket.io、PHP、MySQL、Apache