gpt4 book ai didi

java - 提高数据库访问性能

转载 作者:行者123 更新时间:2023-11-29 10:18:42 25 4
gpt4 key购买 nike

我有一个应用程序在端口上监听 UDP 数据报。我使用 UDP 入站 channel 适配器来监听此端口。我的 UDP channel 适配器配置为使用 ThreadPoolTask​​Executor 来分派(dispatch)传入的 UDP 数据报。在 UDP channel 适配器之后,我使用直接 channel 。我的 channel 只有一个订阅者,即服务激活器。

该服务将传入消息添加到存储在内存中的同步列表中。然后,我有一个线程每 5 秒检索一次列表的内容,并对 MySQL 数据库进行批量更新。

我的问题:

  1. 第一批消息到达。我的 ThreadPoolExecutor 的线程从 UDP channel 适配器获取传入消息并将它们添加到同步列表中。假设已收到并插入 10000 条消息。
  2. 后台线程检索 10000 条消息并进行批量更新 (JdbcTemplate.update(String[])。
  3. 此时,后台线程等待数据库的响应。但是,现在,由于数据库需要时间来执行 10000 条 INSERT,因此已收到 20000 条消息并出现在列表中。
  4. 后台线程接收来自数据库的响应。然后,它检索 20000 条消息并进行批量更新 (JdbcTemplate.update(String[])。
  5. 数据库执行 INSERT 需要更多时间,在此期间,列表中已收到并存储了 35000 条消息。

堆大小不断增长,并在一定时间后导致内存异常。

我正在努力寻找提高应用程序性能的解决方案。

谢谢

最佳答案

每 5 秒存储 10,000 条记录对于任何数据库来说都是相当多的。

你需要考虑其他选择

  • 使用不同的数据存储,例如 NoSQL 数据存储或平面文件。
  • 确保您的磁盘具有良好的写入性能,例如使用写入缓存。
  • 使用具有多个磁盘或 SSD 驱动器的磁盘子系统。

关于java - 提高数据库访问性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11101677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com