我写了一个服务器可以使用的应用程序。此应用程序收集信息,并将其发送到服务器。这是每10秒完成一次。数据量取决于播放器,但让它保持在大约50台服务器上,每台服务器发送100条数据(每10秒钟共计5000条)。
这些数据存在SQL
查询(PreparedStatement
语法),SQL查询的Object[]
值和serverID。
现在,我想处理所有数据。而这对我来说并不顺利。我有一个MySQL服务器,有5个表。其中三个表不断更新,无法跟上数据流。这些表是InnoDB表,主要是因为我可以通过这种方式进行行级锁定,而不是表锁。无论如何,大多数查询都是UPDATE
个查询,几乎没有INSERT
个语句。
我已经尝试过立即执行所有查询,这导致了糟糕的性能,因为连接服务器也必须等待完成。
我还尝试将所有查询放在一个大的ConcurrentLinkedQueue
中,每隔几秒就清空一次这个队列。性能更好,但这太慢了。
然后我尝试了一种每桌解决方案,再次稍好一点。方式太慢了。
目前,它使用的是每服务器设置(为每个服务器创建一个新的thread
并在那里执行所有查询)。这仍然太慢了。它无法跟上。
如你所见,我尝试了很多东西。我还尝试使用addBatch()
后跟executeBatch()
,这也用于当前设置。当然,我也看过这里,Google等等。一些有用的信息,但主要是关于添加PreparedStatements和使用BatchUpdates。
关于如何做到这一点的任何想法?
答案 0 :(得分:1)
我使用了spring-jdbc,并使用com.jolbox.bonecp进行连接。我想建议你使用它。
我使用jdbcTemplate.batchUpdate(query, multyPreparedValues)
multyPreparedValues 是List<Object[]>
但您也可以使用BatchPreparedStatementSetter - 示例https://stackoverflow.com/a/8873528/814304