Как вы можете сделать удаленное соединение MySQL быстрее? - PullRequest
1 голос
/ 05 марта 2012

У меня есть приложение Java, которое анализирует файлы и сохраняет нужные мне данные в базе данных SQLite.

Я пытаюсь сохранить данные в удаленной базе данных MySQL, которая находится на сервере моего хоста.

Я переписал запросы, которые имели другой синтаксис, но у меня все еще есть проблема: это происходит намного медленнее, чем когда я делаю это локально, используя базу данных SQLite. Это то, с чем мне приходится жить, так как один локальный, а другой удаленное соединение, или я должен знать что-то, прежде чем продолжить?

В качестве примера: синтаксический анализ 636 файлов и сохранение всех необходимых мне данных (некоторые данные бесполезны, я должен отсортировать их и т. Д.) Занимает 2,5 минуты, когда я использую базу данных SQLite. Это примерно 4,24 файла в секунду. В среднем это занимает около 15 секунд на файл, когда я использую базу данных MySQL, поэтому это займет примерно в 63 раза больше времени при использовании базы данных MySQL.

Я думаю, что основная проблема может быть, но я не знаю, как ее решить: каждый файл имеет в среднем 190 вставок. Так как файлы представляют собой статистические таблицы для боулинг-центра, и каждая игра представляет собой ряд (60 игроков на лигу, умноженный на 3 игры), плюс некоторые проверки, чтобы увидеть, существует ли лига в таблице лиг, расписании и т. Д., Я не могу на самом деле просто делайте меньше вставок, так как вся информация важна.

Я думаю, что было бы очень полезно, если бы я мог сгруппировать все вкладыши для игровой части в одну большую вставку, но я понятия не имею, возможно ли это / как это возможно / если оно того стоит или если проблема в другом месте .

Я хотел бы знать, нахожусь ли я по крайней мере на правильном пути или мне нужно привыкнуть к своему приложению, которое занимает столько времени для хранения данных, поскольку оно подключено удаленно.

1 Ответ

0 голосов
/ 15 марта 2012

Поскольку никто не ответил с ответом и что я нашел что-то, что я мог бы сделать для улучшения производительности, я опубликую это здесь, чтобы люди могли использовать это в будущем, если, как и я, они не знали о партиях .

Я использовал PreparedStatement s (но обычные операторы работали бы так же), и вместо обычного ps.executeUpdate(); для выполнения моих запросов я использовал ps.addBatch(); между различными запросами, а затем ps.executeBatch();, когда я закончил сборку запросов и хотел сделать одну большую вставку со всем в пакете.

Обратите внимание, что при этом, если ваше соединение имеет имя conn, вы должны сделать conn.setAutoCommit(false); до запуска пакета и conn.commit(); после ps.executeBatch();. Затем вы можете установить autoCommit обратно в true после этого, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...