需求:前端修改某个数据的指标值,然后表里的A1-A20000 这两万条数据根据这个指标进行概率计算,概率计算规则是使用A1-A20000这两万条数据对应的历史数据(近一年的数据)结合前端传过来的指标计算出各自的概率,然后按照概率高低进行排序查询,比如前端传概率从高到底或者从低到高分页查询出A1-A20000。
问题:对于这种需求,正常的做法后端肯定是先将A1-A20000以及对应的所有的历史数据查询出来,然后在内存中计算概率,然后再根据前端的传参进行概率排序在分页返回给前端。但是,如果数据量巨大,加上历史数据有好几万条的话,使用这样方式肯定是不行的。
对于这种需求,该如何解决呢?
获取数据最快捷的方式是数据就绪,如果你的这个指标是可预估的值,可以预计算放到一个集(表)中,当需要查询时快速读取结果。--- 预计算即时反馈
但如果这个指标值并不是可预估的话,作为业务系统计算这项工作(几万条数据)也是可以的,就是非常单纯的计算,就是时长不太保证,且数据量继续攀升后更加无法保障。为此要兼顾当前系统的业务资源,可以将这个需求变动为计划任务,即产生一个计算任务,但不同步出结果(因为考虑到阻塞过长的情况),任务完成后发送通知(比如邮件)告知结果。--- 计划任务延时结果
还有一种比较靠谱的方案,使用ClickHouse这种OLAP数据引擎,保持一定的数据同步和一致性,让这类型的平台负责这种分析任务,毕竟传统的业务数据库偏重的是OLTP。 --- OLAP平台解决