我目前正在我的应用程序中实现一些“报告”,这些“报告”汇总了从数据库中获取的大量信息:一个表的每个单元格来自另一个表的总数,每个单元格来自另一个表的总数,等等。
报告应始终向用户显示最新数据:软件和报告中任何地方发生变化的每个数据都必须是最新的。
我最终生成了太多的 SQL。
我试图缓存(在数据库中)中间结果和表,这是可行的。但是,在应用程序中可以更改数据的任何地方,我都必须重新计算缓存,该缓存以recomputeCache()
在太多地方的调用结束(请记住,这是为了保持绝对最新的报告)。
DBMS 触发器可以工作:表上的触发器计算下一个触发器,它持有一个触发器计算下一个触发器,等等。
但我害怕触发器:
- 复杂性呢?执行计算的代码相当大而且“聪明”:200 行充满语法糖的 .NET 将变成 500 行 PL/SQL。
- 可维护性如何?PL/SQL 会不会更难查找、阅读、理解、修改、调试等?
- 业务逻辑封装呢?这个计算不应该属于业务逻辑层吗?
我正在听取任何建议,帮助我在“典型”软件缓存(我将尝试找到一种智能缓存重新计算策略)和基于触发器的表重新计算(可能会牺牲软件最佳实践和可维护性?)之间进行选择...
谢谢 !