群发MySQL更新

时间:2013-03-12 15:52:06

标签: java mysql

我写了一个服务器可以使用的应用程序。此应用程序收集信息,并将其发送到服务器。这是每10秒完成一次。数据量取决于播放器,但让它保持在大约50台服务器上,每台服务器发送100条数据(每10秒钟共计5000条)。

这些数据存在SQL查询(PreparedStatement语法),SQL查询的Object[]值和serverID。
现在,我想处理所有数据。而这对我来说并不顺利。我有一个MySQL服务器,有5个表。其中三个表不断更新,无法跟上数据流。这些表是InnoDB表,主要是因为我可以通过这种方式进行行级锁定,而不是表锁。无论如何,大多数查询都是UPDATE个查询,几乎没有INSERT个语句。

我已经尝试过立即执行所有查询,这导致了糟糕的性能,因为连接服务器也必须等待完成。
我还尝试将所有查询放在一个大的ConcurrentLinkedQueue中,每隔几秒就清空一次这个队列。性能更好,但这太慢了。
然后我尝试了一种每桌解决方案,再次稍好一点。方式太慢了。
目前,它使用的是每服务器设置(为每个服务器创建一个新的thread并在那里执行所有查询)。这仍然太慢了。它无法跟上。

如你所见,我尝试了很多东西。我还尝试使用addBatch()后跟executeBatch(),这也用于当前设置。当然,我也看过这里,Google等等。一些有用的信息,但主要是关于添加PreparedStatements和使用BatchUpdates。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:1)

我使用了spring-jdbc,并使用com.jolbox.bonecp进行连接。我想建议你使用它。

我使用jdbcTemplate.batchUpdate(query, multyPreparedValues) multyPreparedValues List<Object[]>

但您也可以使用BatchPreparedStatementSetter - 示例https://stackoverflow.com/a/8873528/814304