当前位置: 首页 > 知识库问答 >
问题:

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

姜振濂
2024-03-06

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

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

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

共有2个答案

端木兴国
2024-03-06

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

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

蔺宇
2024-03-06

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

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

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

 类似资料:
  • 我试图指定一个用注释的存储库方法和一个带有对象的Pagable: 编辑1:此存储库正在扩展分页和排序存储库。 对象使用以下方法签名指定: 但生成的输出查询没有排序选项,例如: ...在我期待的时候: 这里有人遇到过这样的问题吗?我使用的是Spring Boot 1.5。x。

  • 问题内容: 我想结合两个查询 然后计算百分比(将第二个查询除以第一个查询)。我想在一个查询中实现这一目标。到目前为止我尝试过的是: 我得到的是: 我想要的是: 问题答案: 这应该给您您想要的: 编辑:没注意到这是为Access。我不知道Access中是否可用,因此您可能需要使用一个等效函数来确保整数不会简单地产生1或0。Access可能会自动将除法转换为小数,但在SQL Server则不然。

  • 问题内容: 我正在尝试,并且在一个查询中,我的一个表名为“商品”。 这是我的桌子的简化: 我想要 : 经过 通过,并最后 每个的行数,然后(相同) 到目前为止,我设法做到了所有相同的事情。 确实,以下查询: 结果如下: 你可以看到,数 柠檬 2次,但我想它指望它只有1次,因为一个 柠檬 是 水果 和其他的 树 。 [更新]:这是我想要的结果: 问题答案: 仅是我对您要求的http://sqlfid

  • 我使用的是Micronaut数据版本1.0.2。 给定以下JPA实体类: 我可以使用的以下方法创建全文搜索查询: 但是,我有一个问题,需要为名称属性添加另一个标准。我想要实现的相当于以下SQL: 我测试了以下方式: 知道怎么让它工作吗? 提前感谢。

  • 因此,我已经使用标准的Spring Data JPA接口完成了这项工作,该接口扩展了PagingAndSortingRepository,以便为REST API实现分页和排序。问题是,现在我想实现同样的事情,但现在只使用普通的JPA,到目前为止,我成功地让我的API分页,但排序根本不起作用。每次尝试设置参数(使用pageable.getsort()从可分页对象中),都会以查询错误结束(如果只是发送

  • 有如下两张表: 1、区域表 2、数量表 根据区域统计数量表获取每个区的数量 获得结果如下: count name 28 A区 18 B区 19 C区 26 D区 问题:现在需要将A和B区的数据合并起来算作A区的数据 期望的是: count name 46 A区+B区 19 C区 26 D区 SQL应该如何调整