1

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

背景:客户聘请了一名承包商,他吹嘘自己可以在 3 个月内推出一款新应用程序。两个月又几天后,我被带进来,那个人被放了;没有完整的代码,没有考虑到架构,以及对 UI 的厌恶。

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

App A (inserts|updates|deletes) 实体 Foo 更新 AppASchema.FooTable ,后者通过后触发器更新 AppBSchema.FooLikeTable ,反之亦然。

我知道这是一个疯狂的想法,但这是我所拥有的最糟糕的想法中最少的一个,我担心的是

  1. 可以创建一个无限循环(AppA 触发器更新 AppB 更新 AppA )
  2. 没有高负载,但这基本上将操作数加倍到 n*2,所以如果我达到 MySQL 服务器的一半容量,对于更新索引等基本内容,它似乎有效或接近满容量。
  3. 作为一个喜忧参半,最初的模式设计者让所有的表 InnoDB 引擎......这对性能来说太可怕了,但这种设置能否确保更高的机会保持完整性。

我实施触发器的时间预算是 12 小时或破产。

4

1 回答 1

1

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

如果不是,并且您必须使用触发器来实现它,那么您是对的,您必须非常小心以确保没有递归触发器依赖项。如果有几张桌子并且它们非常相似,这不会太难。如果有很多表或相似之处很少,这将需要时间。

于 2009-10-10T00:42:56.610 回答