Как обновить таблицу MySQL без прерывания работы сайта? - PullRequest
3 голосов
/ 05 декабря 2009

Один раз в день мне нужно обновить таблицу MySQL новым файлом, загруженным из сети с использованием ftp, а затем mysqlimport. Однако я хочу, чтобы мой сайт продолжал работать без сбоев во время операции mysqlimport, которая занимает довольно много времени (это большая таблица). Как можно было бы гарантировать, что пользователи не будут ждать завершения импорта? Я думаю о том, чтобы импортировать во временную таблицу и затем переименовать ее. Это хороший план?

Ответы [ 2 ]

8 голосов
/ 05 декабря 2009

Малоизвестным фактом является то, что вы можете объединить более одного оператора переименования в mysql, и он будет выполнять все изменения имен атомарно.

create table newtable like oldtable;
insert into newtable .......
rename table oldtable to deleteme, newtable to oldtable;
drop table deleteme;

Таблица переименования заблокирует читателей (фактически она заблокирует любое разрешение имени), но должна быть очень быстрой операцией.

0 голосов
/ 05 декабря 2009

Если это случай инкрементного обновления, вы можете просто ограничить вставку новых данных с помощью cron / scheduling.

Загружать записи XYZ каждую минуту, посмотреть, завершено ли предыдущее обновление, создать файл блокировки, отложенную вставку, промыть и повторить.

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

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

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