我编写了一个服务器可以使用的应用程序。此应用程序收集信息,并将其发送到服务器。每10秒做一次。数据的数量取决于玩家的发挥,但是让它保持在大约50个服务器上,每个服务器发送100条数据(总共每10秒5000条)。
这些数据片段存在于SQL查询(以PreparedStatement语法表示)、值的Object[]和serverID中。
现在,我要处理所有的数据。这就是对我不好的地方。我有一个MySQL服务器,它有5个表。其中三个表在不断更新,无法跟上数据流。这些表是InnoDB表,主要是因为我可以通过这种方式进行行级锁定,而不是表锁。大多数查询都是UPDATE查询,几乎没有任何INSERT语句。
我已经尝试过立即执行所有的查询,这只会导致糟糕的性能,因为连接服务器也必须等待它完成。
我还尝试将所有查询放入一个大型ConcurrentLinkedQueue中,并每隔几秒钟清空该队列。表演更好,但太慢了。
然后,我尝试了一种按表计算的解决方案,这又稍微好了一点。还是太慢了。
目前,它使用的是每台服务器的设置(为每个服务器创建一个新的thread,并执行那里的所有查询)。这还是太慢了。它跟不上。
如你所见,我尝试过很多事情。我还尝试过使用addBatch(),然后是executeBatch(),它也在当前的设置中使用。当然,我也在这里看过,谷歌等有一些有用的信息,但主要是关于添加PreparedStatements和使用BatchUpdates。
对怎么做有什么想法吗?
发布于 2013-04-07 14:09:16
我使用spring,使用com.jolbox.bonecp进行连接。我想推荐你用同样的。
我使用jdbcTemplate.batchUpdate(query, multyPreparedValues),其中multyPreparedValues是List<Object[]>
但是您也可以使用BatchPreparedStatementSetter -示例https://stackoverflow.com/a/8873528/814304。
https://stackoverflow.com/questions/15365856
复制相似问题