我有一个使用邻接表方法关联记录的表(表A),以及另一个使用闭包表关联相同记录的表(表B)。它们都捕获相同的图表,因此它们都需要保持同步。
问题是,更新闭包表的最佳方法是什么?
在我看来,有三种选择:
- 触发器。在A处的 INSERT/UPDATE/DELETE 上,运行一个计算新闭包的存储过程。 缺点:对A 的更改会导致长时间的同步(锁定?)操作;可能的死锁(?)。
- 应用代码。将A中的更改缩小到 Add/Update/Delete 方法(例如存储库模式),并通过调用计算新闭包的 sproc 来重载它们。 缺点:额外往返数据库;如果另一个thead同时以相反的方式修改A或B ,可能会出现完整性问题;例如,如果另一个应用程序决定修改A而不是B ,则可能存在完整性问题。
- 后台更新程序。编写一个辅助进程,不断寻找对A的更新并对闭包表进行相应的更新。 缺点:复杂(编写和管理的额外服务);没有同步的窗口。
即使没有“最佳”选项,任何关于权衡的想法都将不胜感激!