我有以下情况:
- ETL 将数据加载到 DW 中。
- 报告按需运行,可能与 ETL 同时运行,使用来自 DW 的数据。
这是我的问题:我需要确保报告不包含部分数据:
- 如果 ETL 准备好加载数据时正在运行报告,则 ETL 必须等待报告完成。
- 如果正在加载 ETL 并请求报告,则报告必须等待 ETL 完成。
- 如果 ETL 正在等待加载并请求报告,则报告必须等待 ETL 运行并完成 - ETL 始终优先于报告。
获得这个的最佳机制是什么?数据库锁似乎不够智能,无法管理我需要的优先级。
我应该实现自己的锁定机制吗?如果是,是否有众所周知的设计?必须考虑许多事情:跟踪当前正在运行的报告(读取锁定),在 ETL 通知它完成失败的情况下实施锁定到期,等等。