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

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

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

业务场景:
有一批大数据,现在一个接口里面,有多个查询,频繁查,有些是串行化的查询,有些可以并行的查询,统计计算之类的查询,从库里进行查询(这个中间会有网络通信时间),获取到结果大概要个几十秒,数据库用炎凰数据库,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 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办
  • ¥15 有人懂怎么做大模型的客服系统吗?卡住了卡住了
  • ¥20 firefly-rk3399上启动卡住了
  • ¥15 如何删除这个虚拟音频
  • ¥50 hyper默认的default switch
  • ¥15 网站打不开,提示502 Bad Gateway
  • ¥20 基于MATLAB的绝热压缩空气储能系统代码咨询
  • ¥15 R语言建立随机森林模型出现的问题
  • ¥15 中级微观经济学,生产可能性边界问题