我写了一个服务器可以使用的应用程序.此应用程序收集信息,并将其发送到服务器.这是每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更新
- SpringCloud超详细讲解负载均衡组件Ribbon源码 2023-03-07
- 详解Mybatis中javaType和ofType的区别 2023-07-15
- java获取类名的方法详解 2023-03-11
- Mybatis超级强大的动态SQL语句大全 2022-11-16
- Springboot实现多数据源切换详情 2023-05-14
- JSP 开发之Servlet解决网页缓存问题 2023-07-30
- JSP MySQL插入数据时出现中文乱码问题的解决方法 2023-08-02
- Java设计模式中单一职责原则详解 2023-07-15
- jsp获得本地及serverIP的简单方法 2023-08-02
- 一文带你深入了解Java泛型 2023-04-17