Как обновить таблицу MySQL без прерывания работы веб-сайта?

StackOverflow https://stackoverflow.com/questions/1852971

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top