







|
MySQL.RU - Webboard
Вернуться
Транзакционный перенос даннных (zz) 28/02/2003 - 01:58:53
Re: Транзакционный перенос даннных (UzLA) 28/02/2003 - 12:50:07
Re: Транзакционный перенос даннных (zz) 03/03/2003 - 16:53:12
From: zz - 28/02/2003 - 01:58:53
Subject:Транзакционный перенос даннных
-----------------
Задача: требуется безопасно и быстро перенести данные из одной базы данных в другую. Обе под mysql, но на разных компьютерах.
Данные: информация о клиенте - несколько взаимосвязанных таблиц. Объёмы данных: около миллиона записей, операция повторяется каждый час.
Усложнение: Вторая база постоянно работает (выдаёт ответы на веб-
запросы, SELECT-ориентирована)
В простом случае можно было бы делать mysqldump-mysqlimport. но из-за того, что вторая база "вынуждена" отвечать на запросы, требуется некоторая целостность данных. то есть если данные о клиенте хранятся в нескольких таблицах, то должна быть транзакция для INSERT-ов в эти таблицы.
Вопрос состоит в том - как реализовать эти транзакции?
Предположения (используем InnoDB):
1) mysqldump из первой таблицы. выполняем весь в одной транзакции (перед началом - SET AUTOCOMMIT=0, в конце - COMMIT).
один недостаток: при откате InnoDB будет страшнейшим образом тормозить (цитата из документации: "Ограниченный производительностью диска откат может занять в 30 раз больше времени, чем вставка."). хотя для миллиона записей это, возможно, несущественно.
2)транзакция для нескольких клиентов. осуществляется скриптом (напр. perl). берет данные по сотне клиентов из нескольких таблиц и вставляет во вторую базу в транзакции. либо создает аналогичный sql-скрипт.
работает наверняка медленнее предыдущего варианта, но осуществляет баланс между скоростью вставок и откатов.
недостаток: допустим, скрипт вставил 500.000 клиентов из 1.000.000, а к базе уже обратились за данными. результат будет не совсем верным.
Может есть третий вариант?
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
7049
|
|