我编写了一个服务器可以使用的应用程序。此应用程序收集信息,并将其发送到服务器。这是每 10 秒完成一次。数据量取决于玩家玩游戏,但让我们保持在大约 50 个服务器,每个服务器发送 100 条数据(每 10 秒总共 5000 条)。
这些数据片段包含SQL
查询(在PreparedStatement
语法中)、Object[]
SQL 查询的值和 serverID。
现在,我想处理所有数据。这对我来说并不顺利。我有一个 MySQL 服务器,它有 5 个表。其中三个表在不断更新,跟不上数据流。这些表是 InnoDB 表,主要是因为我可以通过这种方式进行行级锁定,而不是表锁定。UPDATE
无论如何,大多数查询都是查询,几乎没有任何INSERT
语句。
我已经尝试立即执行所有查询,这只会导致糟糕的性能,因为连接服务器也必须等待它完成。
我还尝试将所有查询放在一个 bigConcurrentLinkedQueue
中,并每隔几秒钟清空一次该队列。性能更好,但这太慢了。
然后我尝试了一个按表计算的解决方案,再次稍微好一点。还是太慢了。
目前,它使用每台服务器设置(thread
为每台服务器创建一个新服务器并在那里执行所有查询)。这还是太慢了。它跟不上。
如您所见,我尝试了很多事情。我也尝试过使用addBatch()
后跟executeBatch()
,它也在当前设置中使用。当然,我也看过这里,Google 等。有一些有用的信息,但主要是关于添加 PreparedStatements 和使用 BatchUpdates。
关于如何做到这一点的任何想法?