Я написал приложение, которое могут использовать серверы. Это приложение собирает информацию и отправляет ее на сервер. Это делается каждые 10 секунд. Объем данных зависит от игроков, играющих, но позволяет хранить его примерно на 50 серверах, каждый из которых отправляет 100 единиц данных (5000 всего каждые 10 секунд).Массовые обновления MySQL
Эти фрагменты данных содержат запрос SQL
(в синтаксисе PreparedStatement
), значения значений для SQL-запроса и идентификатор сервера.
Теперь я хочу обработать все данные. И это то, что не подходит для меня. У меня есть сервер MySQL, который имеет 5 таблиц. Три таблицы постоянно обновляются и не могут идти в ногу с потоком данных. Таблицы представляют собой таблицы InnoDB, в основном, поскольку я могу блокировать на уровне строк таким образом, а не за столом. Большинство запросов - UPDATE
запросов в любом случае, всего лишь INSERT
операторов.
Я попытался выполнить все запросы сразу, что только привело к ужасной производительности, так как серверу связи также пришлось дождаться, когда это будет завершено.
Я также попытался поставить все запросы в большом ConcurrentLinkedQueue
и опорожнять эту очередь каждые несколько секунд. Производительность была лучше, но это было слишком медленно.
Затем я попробовал решение для каждого стола, которое было немного лучше. Слишком медленно.
В настоящее время он использует настройку для каждого сервера (создает новый thread
для каждого сервера и выполняет все запросы там). Это все еще слишком медленно. Он не может идти в ногу.
Как вы видите, я пробовал много вещей. Я также пробовал использовать addBatch()
, а затем executeBatch()
, который также используется в текущей настройке. Конечно, я также смотрел здесь, Google и т. Д. Имеет полезную информацию, но в основном это просто добавление PreparedStatements и использование BatchUpdates.
Любые идеи о том, как это сделать?
Посмотрите на предложения и здесь: http://dev.mysql.com/doc /refman/5.5/ru/optimizing-innodb-bulk-data-loading.html – mellamokb
Что значит процесс? Вы можете обрабатывать объекты? – Hituptony
Есть ли чтение в одно и то же время или вы действительно просто заинтересованы в получении данных прямо сейчас? – WPrecht