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