Лучший способ восстановить массивные таблицы MySQL - PullRequest
0 голосов
/ 30 марта 2009

Я работаю над приложением, для которого требуется ежедневно перестраивать несколько очень больших таблиц MyISAM (в основном, поиск таблиц, которые перестраиваются с использованием последних отраслевых данных и данных сайта). Запросы, используемые для перестройки этих таблиц, чрезвычайно тяжелы и не подходят для работы с основной производственной базой данных.

У нас есть отдельный сервер, специально предназначенный для генерации этих таблиц, и мы используем репликацию главный-подчиненный, чтобы хранить актуальную копию рабочей базы данных на сервере обработки, который мы используем как часть запросов на перестроение. Мой вопрос заключается в том, как после создания этих таблиц, как лучше всего перенести их в рабочую базу данных (эффективно удалить старую таблицу и заменить ее новой)?

Ранее мы только что переместили двоичные данные и индексные файлы между серверами и скопировали их на место. Однако это не очень хорошо с репликацией.

Какие еще методы существуют для этой задачи? Будет ли какое-либо применение репликация мастер-мастер между производственной и обрабатывающей базой данных?

Ответы [ 2 ]

2 голосов
/ 30 марта 2009

Как насчет построения новой таблицы в отдельной таблице, например, "newfoo", пусть это займет столько времени, сколько вам нужно для его генерации, а когда вы будете готовы его поменять, просто переименуйте это

drop table if exists oldfoo;
rename table foo to oldfoo, newfoo to foo;
0 голосов
/ 30 марта 2009

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

т. Е. По коду или процедуре сохранения вы можете выбрать, куда вставить этот день, выполнив число дней в году, разделенных на два, и проверить результат.

так нечетные дни вы обрабатываете четные таблицы и наоборот.

это код, который мы используем для выбора таблицы

<?php
$day_of_year = (int) date('z');
$table_sufix = $day_of_year % 2 ? "even" : "odd";
$insert_on = "table_" . $table_sufix;

?>

и процесс

<?php
$day_of_year = (int) date('z');
$table_sufix = $day_of_year % 2 ? "odd" : "even"; // note only this little change
$process_table = "table_" . $table_sufix;

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