MySQL模式通过触发器进行模式同步?

时间:2009-10-01 05:19:29

标签: sql mysql soa legacy-code legacy-database

快速说明:我有19天的时间来解决客户的问题。

背景:    客户聘请了一位承包商,他吹嘘他可以在3个月内获得一个新的App。两个月,几天后我被带进来,个人被释放;没有完整的代码,没有考虑到架构,以及UI的可憎。

我有两个应用程序:一个生产和成熟,另一个需要一些爱。一个拥有我需要的所有数据而另一个没有。我正在编写新代码TDD风格,旨在部分陪审团操纵SOA基础架构,涵盖除数据本身之外的所有问题。如果我有更多的时间,我可以使用liquibase将模式重构为可憎的碎片(使用你的想象力)但我不这样做...所以计划B如下:

App A(插入|更新|删除)实体Foo更新AppASchema.FooTable,通过post触发器更新AppBSchema.FooLikeTable,反之亦然。

我知道这是一个疯狂的想法,但它是我所得到的最糟糕的想法,我的担忧是

  1. 可以创建无限循环(AppA触发更新AppB更新AppA)
  2. 没有高负载,但这基本上将操作加倍到n * 2,所以如果我达到MySQL服务器容量的一半,似乎有效处于或接近满容量,如更新索引等基本内容
  3. 作为一个混合的祝福,最初的架构设计师制作了所有表格InnoDB引擎......这对于性能来说太糟糕了,但这种设置可以确保更高的机会保持完整性。
  4. 我实施触发器的时间预算是12小时或破产。

1 个答案:

答案 0 :(得分:1)

AppASchema.FooTable和AppBSchema.FooLikeTable 是否足够相似,您可以将其中一个重新实现为updatable view?您可能必须创建一些额外的表来保存对应用模式之一唯一的列。这比一堆触发器更易于维护。

如果没有,并且您必须使用触发器实现它,那么您必须非常小心以确保没有递归触发器依赖项。如果有一些表并且它们非常相似,那就不会太困难了。如果有很多表或相似之处很少,那就需要时间。