Как вы можете сделать удаленное соединение MySQL быстрее?

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

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

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

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам