全量数据进行指标计算,然后排序分页查询怎么处理?

需求:前端修改某个数据的指标值,然后表里的A1-A20000 这两万条数据根据这个指标进行概率计算,概率计算规则是使用A1-A20000这两万条数据对应的历史数据(近一年的数据)结合前端传过来的指标计算出各自的概率,然后按照概率高低进行排序查询,比如前端传概率从高到底或者从低到高分页查询出A1-A20000。

问题:对于这种需求,正常的做法后端肯定是先将A1-A20000以及对应的所有的历史数据查询出来,然后在内存中计算概率,然后再根据前端的传参进行概率排序在分页返回给前端。但是,如果数据量巨大,加上历史数据有好几万条的话,使用这样方式肯定是不行的。

对于这种需求,该如何解决呢?

阅读 885
2 个回答

获取数据最快捷的方式是数据就绪,如果你的这个指标是可预估的值,可以预计算放到一个集(表)中,当需要查询时快速读取结果。--- 预计算即时反馈

但如果这个指标值并不是可预估的话,作为业务系统计算这项工作(几万条数据)也是可以的,就是非常单纯的计算,就是时长不太保证,且数据量继续攀升后更加无法保障。为此要兼顾当前系统的业务资源,可以将这个需求变动为计划任务,即产生一个计算任务,但不同步出结果(因为考虑到阻塞过长的情况),任务完成后发送通知(比如邮件)告知结果。--- 计划任务延时结果

还有一种比较靠谱的方案,使用ClickHouse这种OLAP数据引擎,保持一定的数据同步和一致性,让这类型的平台负责这种分析任务,毕竟传统的业务数据库偏重的是OLTP。 --- OLAP平台解决

几万条数据算一算 时间应该也不是很长

另外一种方式么,就是 前端发起一个 指标计算任务,后台返回一个 任务Token
然后前端显示个 进度指示条,间隔时间轮询任务进度(或者完成了就直接返回分页数据)
大概率你这个指标任务是可以并行计算的,服务器多线程并行计算(任务分段多进程执行也行)可以提高响应速度
后端计算结果可以存 Radis,然后从 Radis 分页取就是了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题