4

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

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

我已经尝试立即执行所有查询,这只会导致糟糕的性能,因为连接服务器也必须等待它完成。
我还尝试将所有查询放在一个 bigConcurrentLinkedQueue中,并每隔几秒钟清空一次该队列。性能更好,但这太慢了。
然后我尝试了一个按表计算的解决方案,再次稍微好一点。还是太慢了。
目前,它使用每台服务器设置(thread为每台服务器创建一个新服务器并在那里执行所有查询)。这还是太慢了。它跟不上。

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

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

4

1 回答 1

1

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

我使用multyPreparedValuesjdbcTemplate.batchUpdate(query, multyPreparedValues)所在的位置List<Object[]>

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

于 2013-04-07T14:09:16.003 回答