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