我写了一个服务器可以使用的应用程序.此应用程序收集信息,并将其发送到服务器.这是每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更新
基础教程推荐
- Mybatis generator修改Mapper.java文件实现详解 2023-06-06
- 工作中禁止使用Executors快捷创建线程池原理详解 2023-07-01
- SpringCloud环境搭建过程之Rest使用小结 2023-04-06
- springmvc请求转发和重定向问题(携带参数和不携带参数) 2023-06-23
- Spring框架JdbcTemplate数据库事务管理完全注解方式 2022-11-25
- Spring Boot + EasyExcel实现数据导入导出 2023-03-22
- Java实现飞机小游戏 2022-12-07
- Maven分步详解多环境配置与应用流程 2023-04-18
- SpringBoot详细讲解日志文件 2023-01-18
- Java之旅--定时任务(Timer、Quartz、Spring、LinuxCron) 2023-09-01