我写了一个服务器可以使用的应用程序.此应用程序收集信息,并将其发送到服务器.这是每10秒完成一次.数据量取决于播放器,但让它保持在大约50台服务器上,每台服务器发送100条数据(每10秒钟共计5000条).这些数据存在SQL...
我写了一个服务器可以使用的应用程序.此应用程序收集信息,并将其发送到服务器.这是每10秒完成一次.数据量取决于播放器,但让它保持在大约50台服务器上,每台服务器发送100条数据(每10秒钟共计5000条).
这些数据存在SQL查询(在PreparedStatement语法中),SQL查询值的Object []和serverID.现在,我想处理所有数据.而这对我来说并不顺利.我有一个MySQL服务器,有5个表.其中三个表不断更新,无法跟上数据流.这些表是InnoDB表,主要是因为我可以通过这种方式进行行级锁定,而不是表锁.无论如何,大多数查询都是UPDATE查询,几乎没有任何INSERT语句.
我已经尝试过立即执行所有查询,这只会导致可怕的性能,因为连接服务器也必须等待完成.
我还尝试将所有查询放在一个大的ConcurrentLinkedQueue中,并每隔几秒清空一次这个队列.性能更好,但这太慢了.
然后我尝试了一个每表解决方案,再次稍好一点.方式太慢了.目前,它使用的是每服务器设置(为每个服务器创建一个新线程并在那里执行所有查询).这仍然太慢了.它无法跟上.
如你所见,我尝试过很多东西.我也尝试使用addBatch(),然后使用executeBatch(),它也在当前设置中使用.当然,我也看过这里,谷歌等等.有一些有用的信息,但主要是关于添加PreparedStatements和使用BatchUpdates.
关于如何做到这一点的任何想法?
解决方法:
我使用spring-jdbc,并使用com.jolbox.bonecp进行连接.我想建议你使用它.
我使用jdbcTemplate.batchUpdate(query,multyPreparedValues),其中multyPreparedValues是List< Object []>
但您也可以使用BatchPreparedStatementSetter – 示例https://stackoverflow.com/a/8873528/814304
本文标题为:java – 大规模MySQL更新
基础教程推荐
- Java中try-catch-finally执行顺序你知道吗 2023-01-13
- Java+TestNG接口自动化入门详解 2023-08-08
- java开发使用StringUtils.split避坑详解 2023-07-01
- Java数组与字符串深入探索使用方法 2023-03-11
- JPA @ManyToMany 报错StackOverflowError的解决 2023-08-07
- Java 天生就是多线程 2023-02-10
- java实现登录注册界面 2023-01-13
- 智能 AI 代码生成工具 Cursor 安装和使用超详细教程 2023-07-15
- Intellij IDEA创建web项目的超详细步骤记录 2023-04-17
- WebClient抛UnsupportedMediaTypeException异常解决 2022-10-31
