Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
7049



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |