2008-11-20 68 views
6

目前,我们在Data-Access对象中使用手动滚动的SQL,并使用大量的存储过程和触发器,这些存储过程和触发器的数量约为20k行代码。我们发现简单的修改会导致几天的修复工作,并导致最终期限的下滑。应对模式演变的策略?

变化包括修改表,以应付增加的数据的基础上,QA /用户报告的模式等,其多数民众赞成在建,以取代旧的东西和缓慢的一个非常活跃的系统的整体重构。

我们看着可尝试并限制这些变化的影响的PHP ORM解决方案,但他们应对我们的模式是太慢了; “简单”的sql结果比我们的自定义查询返回的时间要长得多,并导致〜.5s的页面访问超过20秒。

我可以看看,以应对与关系数据库架构演变,在一般情况下有哪些最佳实践/策略?

编辑:忘了提及有关触发器;我们有很多依赖级联变化的数据,例如。价格变化在这里为这个用户更新了价格用户等

+0

可不可以给这种改变需要较长的时间来实现的例子吗? – finnw 2008-11-20 10:08:42

回答

1

我的建议是摆脱存储过程,而使用内联SQL,可能保持在文本/ XML文件。我发现SProcs维护起来更烦人和费时。一旦生成查询计划(第一次执行查询),您会发现性能差异可以忽略不计。另外,你将能够版本控制你的整个DB脚本...

+0

我upvoted,但在XML文件中的SQL? “ * FROM ......”? – MusiGenesis 2008-11-20 10:21:55

2

我建议使用连续(或至少每晚)构建策略。
在每次签到时重建数据库,或者至少每天一次。
也是每天一次,运行单元测试来运行每一位代码,无论是存储程序,触发器还是数据访问层。

有一个很大的成本,以书面形式存储的特效,但是这会立即识别符。
一旦你知道休息的地点,你可以修复它。

我很想听听其他人对这个策略的经验适用于数据库变更。

2

我们使用Enterprise Architect作为我们的数据库定义。我们包含存储过程,触发器以及在UML中定义的所有表定义。该计划的三大亮点是:

  1. 从ODBC连接导入UML图。
  2. 一次为整个DB生成SQL脚本(DDL)
  3. 生成DB的自定义模板化文档。

作为一名开发人员,我在10多年里从未对任何其他工具印象深刻。 EA一举支持Oracle,MySQL,SQL Server(多个版本),PostGreSQL,Interbase,DB2和Access。任何时候我遇到问题,他们的论坛都会及时回答我的问题。强烈推荐!!

在DB的变化来了,我们做那么在EA,生成SQL,并检查它到我们的版本控制(SVN)。我们使用Hudson建筑,当它看到你已经修改了检查的SQL它自动建立从脚本到数据库中。

0

这里是我的建议:

  1. 试图摆脱的最少使用的功能。质疑未被使用的功能。应用程序中的每个功能都与其相关的几个成本级别(维护,支持,回归测试,代码复杂性等)。
  2. 存储过程望而却步,除非有绝对没有办法有效,并在代码中的可扩展的方式做到这一点。
  3. 逐步引入的ORM溶液(使用重构从JDBC移动到ORM),以减少在CRUD操作的代码和代码复杂度的量
  4. 生成功能,集成和单元测试,当你修正错误并把这些测试连续集成系统。尽可能多地自动执行回归测试,以便在签入时立即发现问题。
  5. 一般情况下,当你修正错误,利用这个机会来重构解耦实现/代码模块。

如果您有关于数据库迁移问题的问题,这可能帮助:http://shashivelur.com/blog/2008/07/hibernate-db-migration/