我有以下方案:
这是我的问题:我需要确保报告中不包含部分数据:
获得此功能的最佳机制是什么?数据库锁似乎不够智能,无法管理我需要的优先级。
我应该实现自己的锁定机制吗?如果是的话,是否有一个众所周知的设计呢?必须考虑许多事项:跟踪当前正在运行的报告(锁定读取),对ETL未通知完成时的情况实施锁定到期等等。
答案 0 :(得分:1)
如果你正在使用Cognos,那么我认为你基本上没有运气,因为“如果ETL正在运行就阻止报告运行”的设置类型,除非你想在严重记录的API中搞砸。
您最好的选择是识别特定报告,通常是针对聚合运行的报告,并确保设置ETL流程以最后更新事实和汇总,并作为一个大的“更新”事务。如果你使用一个为你提供读一致性的dbms,你应该能够做到这一点,而不会出现只有一半数据加载到它的报告。
访问多个事实/多个aggs的报告将更加麻烦。甚至可能是你可能需要设置某种“表格交换”,你可以在其中构建你需要的alter table rename
以换出表格。
答案 1 :(得分:0)
你可以让etl进程在启动时在表中的记录中设置一个标志,并在它完成时取消设置吗?然后,报告系统可以查询此表以查看是否已设置标志,并通知用户仓库正在运行,并将报告放入在ETL过程完成时处理的队列中,或者告诉用户稍后再尝试。如果您想允许用户使用已经处理的事实,您的标志表将需要在表格中 - 即在每个表的标记记录上。