Java程序员廖志伟 2022-03-10 17:21 采纳率: 0%
浏览 184

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

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

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

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

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

我想要达到的结果

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

  • 写回答

2条回答 默认 最新

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

    楼主,问一下哈

    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?