复杂数据库设置的开发环境?

时间:2011-10-19 18:56:15

标签: php mysql development-environment staging

我一直是复杂应用程序的唯一开发人员,已经发展到我需要开始构建开发团队的程度。我们的系统是一个~250,000 LOC PHP应用程序,MySQL作为后端数据库。

我有一个临时服务器,可以完美地复制生产Web服务器和计算节点。在过去,我一直在提交/推送升级,运行测试,然后在我调试所有内容时推送到生产。这非常有用,并且没有任何问题,因为在登台服务器命中生产数据库服务器时,我一直非常小心地测试MySQL的更改,插入,删除等。

作为唯一的开发人员,我没有走上将MySQL服务器复制到临时或开发克隆的道路。这是因为我们的应用程序使用一致的哈希算法进行表查找,处理4个生产数据库服务器中的数千个表。我还没弄清楚如何克隆并保持这些数据库服务器的同步(每个服务器都是8核,64GB内存)。我们的DB总大小约为300GB。对于一个小的开发环境来说,保持这么多数据同步似乎几乎是不可能的。更不用说如果我确保它们保持同步,那么开发/暂存环境将会非常缓慢,以至于它可能几乎无法使用。

我已经考虑过构建大量的测试数据并保持模式同步,但我希望开发人员能够看到生产数据进行编码和调试。鉴于我们的应用程序的性质,开发人员必须看到填充生产数据库服务器的相同数据。

我的问题是在这种情况下我应该为开发环境做些什么?我想让开发人员自由地使用模式来编写系统的复杂部分,但我不希望他们使用实时模式/数据。我还应该注意,我保持现场和非现场所有数据库服务器的每小时和每日备份。我可以回滚MySQL表,但这将是痛苦的,可能需要一些停机时间。我认为最好的选择是首先避免这种需求。

其他人成功完成了什么?我怀疑像Facebook和谷歌这样的地方会将他们的整个数据库设置复制到开发者机器上,所以必须有某种我不知道的设置/过程。

感谢您花时间阅读这篇冗长的帖子,我期待您的任何建议。

1 个答案:

答案 0 :(得分:1)

一个简单,有效但无法执行的策略是使用MySQL事务。我们有一个小团队和一个小型开发服务器,这对我们来说效果很好。如果你有一个数据库包装类(或类似的东西),你可以让它在创建时开始事务,并在它被破坏时回滚。显然,有人可以在那里调用commit,或者手动打开连接,但它确实有帮助。小型开发团队可能只使用这种策略,因为很容易将模式传达给新的团队成员。