【问题标题】:How can you make a remote MySQL connection faster?如何更快地建立远程 MySQL 连接?
【发布时间】:2012-03-05 06:53:25
【问题描述】:

我有一个 Java 应用程序,它解析文件并将我需要的数据存储在 SQLite 数据库中。

我正试图让它将数据存储在我主机服务器上的远程 MySQL 数据库中。

我重写了具有不同语法的查询,但我仍然有一个问题:它比我使用 SQLite 数据库在本地执行时要慢得多。这是我必须忍受的事情,因为一个是本地连接,另一个是远程连接,还是在继续之前我应该​​知道什么?

举个例子,当我使用 SQLite 数据库时,解析 636 个文件并存储我需要的所有数据(有些数据没用,我必须对其进行排序等)需要 2.5 分钟。这大约是每秒 4.24 个文件。平均而言,当我使用 MySQL 数据库时,每个文件大约需要 15 秒,因此使用 MySQL 数据库需要大约 63 倍。

我认为主要问题可能是,但我不知道如何解决:每个文件平均有 190 次插入。由于文件是保龄球中心的统计表,每场比赛都是一行(每个联赛 60 名球员乘以 3 场比赛),加上一些检查联赛是否存在于联赛表、赛程等,我真的不能只需少插入,因为所有信息都很重要。

我认为如果我可以将游戏部分的所有插页组合到一个大插页中会很有帮助,但我不知道这是否可能/如何可能/是否值得或问题是否出在其他地方.

我想知道我是否至少在正确的轨道上,或者我是否应该习惯我的应用程序因为它是远程连接的而需要花费这么多时间来存储数据。

【问题讨论】:

  • 是的,您可以批量插入,例如INSERT INTO mytable (col1, col2) VALUES (1, 2), (3, 4), (5, 6)。关于压缩,请阅读此内容 - stackoverflow.com/questions/2506460/…
  • @RomanNewaza 这个问题是我将在同一行有 180 组值的一行,我想这不是什么大问题,但还有一个事实是有一个 ON DUPLICATE KEY UPDATE 子句,以防如果前一个文件出现错误,重新上传文件并使用新结果,我觉得批量插入会使其难以管理。我想这值得一试,谢谢!
  • 顺便说一句,您可以尝试通过数据库连接器设置压缩标志。

标签: mysql remote-connection


【解决方案1】:

由于没有人回答并且我发现了一些可以提高性能的方法,因此我将在此处发布它,以便将来如果像我一样不知道批次的人们可以使用它.

我使用PreparedStatements(但常规语句的工作方式相同),而不是使用通常的ps.executeUpdate(); 来执行我的查询,我在不同的查询之间使用ps.addBatch();,然后当我使用ps.executeBatch();已完成构建查询,并希望对批处理中的所有内容进行一次大 INSERT。

请注意,在执行此操作时,如果您的连接命名为 conn,则应在开始批处理之前执行 conn.setAutoCommit(false); 并在 ps.executeBatch(); 之后执行 conn.commit();。如果您愿意,您可以在此之后将 autoCommit 设置回 true。

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    相关资源
    最近更新 更多