gpt4 book ai didi

java - 海量 MySQL 更新

转载 作者:可可西里 更新时间:2023-11-01 07:40:36 27 4
gpt4 key购买 nike

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

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

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

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

关于如何做到这一点有什么想法吗?

最佳答案

我用的是spring-jdbc,连接用的是com.jolbox.bonecp。我想推荐你使用相同的。

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

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

关于java - 海量 MySQL 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com