项目上有这样的需求,因为客户有大量的统计数据的要求,所以需要将业务系统的数据,通过查询语句来获得想要的统计结果
客户目前的实现方式是直接通过SQL语句和视图来实现,但随着数据量日渐庞大,分析场景又越来越多,想改变一种思路。
计划利用存储过程,实现将原始数据通过存储过程加工后,写入到一个单独的表中,这个表是建立在一个单独的用户和表空间下,一方面能提升性能,另一方面可以加密SQL代码。
但是遇到一个问题,就是如何实现对表的变动更新,即原始表发生变动后,仅将变动后的统计结果写入新表中,这其中有几个细节:
1、在一个存储过程或存储过程用到的查询中,_原始表不止一个_;
2、原始表变动并不仅仅是INSERT,存在UPDATE和DELETE也比较多,但客户不让用触发器;
3、写入新表是统计的结果,而非原始数据,这里面会_涉及到很多复杂查询_。
4、数据量真的很大,平均一张原始表就有10个G;
5、也建议客户上ETL,但是因为预算等原因,短期内可行性不大
现在的方式是在存储过程中,直接将统计表数据清空,再重新写入数据,但由于性能瓶颈,清空再写入会有个时间差,差不多10分钟左右,这期间如果前端程序在同时查询这张表,就会反应没有结果,客户对数据更新时间要求又比较严苛,甚至想要实时数据。
所以问题来了:
** 想问一下,使用存储过程实现这样的思路,如何实现只对变化的数据进行更新?如果这个思路不可行,那么应该如何优化,来提升数据更新性能呢?**