Разработчики социальной сети Facebook сообщили об открытии утилиты OSC (Online Schema Change), позволяющей обеспечить возможность изменения на лету схемы представления данных в MySQL. По заявлению разработчиков использование классической операции "ALTER TABLE" для изменения структуры реплицированной на многие серверы базы выполняется слишком долго, поэтому для ускорения в OSC задействованы триггеры MySQL 5.0 для выполнения операций ALTER TABLE в неблокирующем режиме.

Алгоритм OSC сводится к выполнению полного копирования данных во временную таблицу; изменению схемы временной таблицы без блокирования работы основной таблицы; синхронизации из основной таблицы всех данных, изменившихся с момента копирования (используются триггеры); замене базовой таблицы на подготовленную временную таблицу с новой структурой. Интересно, что по словам представителя Facebook ранее изменение схемы на тысячах серверов проекта, с учетом постепенного проведения операции на небольшом числе машин во время минимальной активности, занимало до 6 месяцев, в то время как OSC позволил выполнить операцию на всех серверах разом и произвести изменение схемы за пол дня, без остановки работы сервиса.

Технология основана на коде утилиты oak-online-alter-table из набора openark kit. В Facebook утилита переписана на PHP, расширена поддержкой проверки внешних ключей, более тонким контролем возможных нештатных ситуаций, оптимизирована для более быстрого сканирования таблиц и диапазонов первичных ключей.

Источник: http://www.opennet.ru/opennews/art.shtml?num=28046