2012-08-14 61 views
6

现在,开发人员都拥有一个本地开发环境,其中包含生产数据库的快照 - 他们可以扭曲,搅动并剔除数据,而不会影响除自己以外的任何人。关于维护开发数据库的建议

这些快照开始变大,并且它们的数据导入开始需要接近一个小时。

维护开发数据有什么更好的建议吗? dev的数据可以被撕开了潜在的变化,然后根据需要放回到一起,如果改变的想法是不错,等

+0

也许类似[Vagrant](http://vagrantup.com/)用于个人开发实例并管理一组可用垃圾数据运行的测试/示例SQL迁移? – Nick 2012-08-14 20:05:08

回答

1

根据我的经验,每个环境都有一个集中的DB +数据:开发,测试+集成和生产一直是最好的方法。

  • 开发:让开发人员做任何他们想做的事情。如果需要类似生产的数据,则混淆/删除敏感数据。这个数据库越轻,您移动,维护和备份的效果越好。
  • 测试:用它来模拟生产环境,让 测试者输入/检索所有数据的匮乏而只能通过你的 应用程序界面。此环境还允许您在将它们发送到生产之前测试您的部署 ,但您不希望数据库安装程序不良 将生产应用程序置于不可用状态。如果需要,您可以将 与生产数据一起输入此环境,但也可以将敏感数据混淆/删除 。您可以使用大批量的产品在生产前发现性能问题。
  • 生产:不要让您的生产数据/环境单独存在,您不需要 希望敏感数据最终落入错误的手中或DB错误配置允许开发人员意外更改数据。
+0

我想我的问题(对于这些答案中的大多数)是在开发人员将开发环境中的数据分解之后 - 如何在没有拍摄产品快照的情况下将数据返回到基准 - 在此案件结束时间很长。 – cgmckeever 2012-08-14 18:04:48

+0

开发快照。 – Darthtater 2012-08-14 19:04:05

0

我在同样的情况我。我的想法是将存档数据移动到只读文件组,以便我只需要备份和恢复一次。非归档数据会更小,并且可以更频繁地复制到备份存储和开发机器。

当然,只有当它是可能的拆分数据库大小的很大一部分开了一个只读文件组的作品。

不同的想法将是一个开发机器上一次恢复和使用数据库快照,以便快速恢复到一个干净的状态。我发现一个特别有用。

1

通常,作为开发人员,您希望从开发数据库中设置一些东西。

你希望它是容易的工作 - 它应该是简单的做出改变,保持版本的这些变化,并将其应用到其他环境。

你想要有代表性的数据 - 并且可以预测这些数据。例如,如果您正在构建发票系统,您希望拥有已知信用额度的客户,以便您可以编写测试用例来跟踪发生的事情,例如发票,支付等。(集成测试,而不是单元测试) 。

您希望能够对代表性数据卷进行查询,从而在开发和生产中都会出现性能问题。

你永远,永远希望能够影响到“真实”数据 - 例如,你想要的电子邮件地址和名称是匿名的,你希望密码重新设置。

Continuous Database Integration提供了一个解决这个最 - 也解决了“就需要一个小时来建立一个数据库开发环境”的问题。

2

我尝试使用以下方法:

开发商维持基准脚本是在版本控制和建立从零开始的数据库架构。它会像生产数据库中一样创建模式。

他们还维护一个'脚本'来设置测试数据。这个'脚本'实际上使用生产类,有时还使用一些DSL。为了合理快速,脚本只生成最小的测试数据。我建议将它作为为任何新功能构建创建一些测试日期的完成定义的一部分。

开发人员可以在其数据库(或数据库模式)上随意运行这些脚本。第一个脚本也用作运行自动数据库测试的基础。

开发人员完成的任何工作的结果都是一个迁移脚本。即可以应用于生产数据库以使其达到新的期望状态的脚本,包括对数据的更新。

这些迁移可以在生产数据库的快照上进行测试。生产数据库的快照也用于运行负载和性能测试。

仅适用于我使用数据库特定工具的快照。大多数情况下,其他的一切都是用主要的编程语言编写的(对我而言是java),所以开发人员可以使用它。

我经常遇到这种错误(“太多的脚本”,“太多的数据库”,“我不想使用版本控制,因为我的数据库建模工具不支持它”)。但从大量的手工作品appart我没有真正看到一个替代品。