Java高CPU占用问题

小胖
  • 70

问题描述

如题,如何解决CPU占用过高的问题。现在有一个项目需要对大量数据进行非常频繁的处理,这个项目是合作项目,合作程序每隔10秒钟向数据库中写入大约1000条数据,但是他们写入的数据无法直接使用。我方程序使用定时任务每隔10秒钟访问数据库,获取新增的数据并进行解析、计算、另存、并操作关联数据表,每次大约执行10条sql语句。但是这种处理方式大量占用数据库服务器CPU,客户并不打算升级器,后续每次新增的数据量还会增长,求一个有效的优化方案。感激不尽!

问题补充

1.用户要求使用折线图实时展示最新数据,就是说每次出现新数据就必须立刻反应在折线图上,他们最低的要求是每10秒刷新一次。
2.合作程序是以前的程序,我们没办法调整对方的程序,只能把处理放在我方。

回复
阅读 1.5k
4 个回答

既然他们写入的数据无法直接使用,可以考虑用MQ代替写数据库,比如,他们通过MQ发送1000条数据,你们的程序从MQ中取得数据,处理后再写入数据库。比如RabbitMQ。

  • 能否对方的数据做预处理,然后在写入库中,这样咱们这边能直接使用?。。。能否让对方写入消息队列(RabbitMQ),然后对数据做完处理,在存库,然后就可以直接使用。
  • 如果数据量比较小,能否直接存储原始数据,每次请求折线图,实时处理数据后再返回。
  • 如果数据量很大,能否将数据划分成可变的(比如平均值)和不可变的(昨天的生产量),然后不可变的直接存库,可变的每次实时计算。
  • 按照你现在的流程,好像没啥优化的余地了,最多就是数据库层面的一些优化。。。如果你找到好的解决方案,给我回复一下,我也学习一下。

内存够用的话可以把热数据都放在内存,数据库只做简单的查询,聚合等操作直接在内存中操作。
使用搜索引擎技术也许不错,但是也是比较耗内存的。

内存不行CPU也不行又想要大量数据实时查询的话,简直就是又想马儿跑,又想马儿不吃草。

如何用黑白打印机打印彩色照片?

单开一个服务,可以在当前服务器,也可以扩展一个服务器,去专门去处理对方写入的数据库,将处理好的数据存到自己使用的内存数据库(redis、mongo)

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