1

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

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

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

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

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

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

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

4

1 回答 1

1

由于没有人回答并且我发现了一些我可以做的事情来提高性能,我将把它贴在这里,以便人们将来可以使用它,如果像我一样,他们不知道批次。

我正在使用PreparedStatements (但常规语句的工作方式相同),而不是像往常一样ps.executeUpdate();执行我的查询,我ps.addBatch();在不同的查询之间使用,然后ps.executeBatch();当我完成构建查询并想要制作一个包含所有内容的大 INSERT批次。

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

于 2012-03-15T19:13:22.547 回答