我是廖志伟 2022-03-10 17:21 采纳率: 0%
浏览 176

一个接口内海量数据频繁查询怎么优化?

问题遇到的现象和发生背景

业务场景:
有一批大数据,现在一个接口里面,有多个查询,频繁查,有些是串行化的查询,有些可以并行的查询,统计计算之类的查询,从库里进行查询(这个中间会有网络通信时间),获取到结果大概要个几十秒,数据库用炎凰数据库,SQL语法层面已经没法优化了。用户过滤条件是动态的,数据也是实时变化的,数据类型是一些大型企业的数据,做数据统计,流程挖掘的数据。接口拆分不理想,延时不能影响用户体验,时效性很高,一次查询可能几百M,将用户过滤的一些条件查询出来之后,一部分数据直接统计获取结果,一部分数据通过算法计算获取结果,将多个结果返回给前端。

我的解答思路和尝试过的方法

解决方案一:把库里的数据去到本地内存里面,进行条件过滤,减少和数据库的通信,但是弊端很明显,JVM内存是有上限的,做不到分布式内存数据库。
解决方案二:将用户行为量化,另起一个程序,专门去计算查询,将结果存储到另一种表里面,前端展示就直接取这个表里面的数据,但是弊端也很明显,计算出来的数据实时性没法保证,用户行为量化的工作量也很大。
解决方案三:前端页面进行调整,隐藏部分查询时间较长的展示部分,用户进入这一页面时,后端就开始加载数据,用户点击按钮展示查询时间较长的展示部分,缺点很明显,根源上还是没解决接口查询时间慢的问题。
解决方案四:数据放redis缓存,也不能解决网络通信问题,多次查询问题,网络连接传输,用 pipline 缓解也没从根本上解决。
解决方案五:数据放Elasticsearch,也不能解决网络通信问题,多次查询问题,网络连接传输,还会有内存上限,一般es内存不能超过32g,而且还要分一部分给Lucene,es也不好做定制化查询,jvm在内存小于32G的时候会采用内存对象指针压缩技术,超过了就不好使了

我想要达到的结果

有什么好的优化方案吗?可以保证数据的实时性计算的结果,也不影响用户体验。

  • 写回答

2条回答 默认 最新

  • 哆啦A梦丶幻想 2022-03-10 18:40
    关注

    楼主,问一下哈

    评论
  • weixin_42496578 2022-03-10 18:19
    关注

    你的场景都没讲清楚,你现在的业务的统计计算出的数据返回,还是统计某些数据返回,你要实时性,用redis无法保证,后面两个方案说网络通信问题是???,数据不可以冗余到es中进行查询吗?是数据量大导致内存问题?

    评论

报告相同问题?

问题事件

  • 修改了问题 3月10日
  • 修改了问题 3月10日
  • 修改了问题 3月10日
  • 创建了问题 3月10日

悬赏问题

  • ¥15 电脑连不上无线网络如下诊断反馈应该如何操作
  • ¥15 telegram api 使用forward_messages方法转发消息时,目标群组里面会出现此消息来源,如何隐藏?
  • ¥15 在ubuntu中无法连接到远程服务器传输文件
  • ¥15 关于#tensorflow#的问题:有没有什么方法可以让机器自己学会像素风格的图片
  • ¥15 Oracle触发器字段变化时插入指定值
  • ¥15 docker无法进入容器内部
  • ¥15 qt https 依赖openssl 静态库
  • ¥15 python flask 报错
  • ¥15 改个密码引发的项目启动问题
  • ¥100 CentOS7单线多拨