The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Facebook открыл код инструмента для ускорения смены схемы данных в MySQL

22.09.2010 14:35

Разработчики социальной сети 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, расширена поддержкой проверки внешних ключей, более тонким контролем возможных нештатных ситуаций, оптимизирована для более быстрого сканирования таблиц и диапазонов первичных ключей.

  1. Главная ссылка к новости (http://www.theregister.co.uk/2...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/28046-mysql
Ключевые слова: mysql, schema
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (21) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, klalafuda (?), 15:25, 22/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно, как они борятся с внешними ключами :-? Вот есть рабочие таблица A на которую ключи из таблицы B. Мы решили что-то поменять в структуре таблицы A. Сделали временную таблицу T, в которую скопировали содержимое таблицы A + синхронизируем во времени содержимое T с A посредством тригеров. Через какое-то время T поменяла структуру. Дальше просто RENAME TABLE T в A :-? И при этом ключи из B в A не испортятся?
     
     
  • 2.2, filosofem (ok), 15:44, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Интересно, как они борятся с внешними ключами :-?

    Никак:

    if ($row['count'] != 0) {
    $error = 'FK exists to or from table being altered. '.
    'FK and triggers may not work well together. '.
    'So OSC not allowed unless OSC_FLAGS_ACCEPTFK is set.';
    $this->raiseException($error, false);
    }


    Кстати это и называется
    >расширена поддержкой проверки внешних ключей

    =)

     
     
  • 3.6, klalafuda (?), 16:30, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > if ($row['count'] != 0) {
    >     $error =    'FK exists to or from table being altered. '.
    >                 'FK and triggers may not work well together. '.
    >                 'So OSC not allowed unless OSC_FLAGS_ACCEPTFK is set.';
    >     $this->raiseException($error, false);
    > }

    Это я так понимаю кусок кода из их скриптов? Я их не смотрел пока если честно. Т.е. получается, что OSC явным образом проверяет на наличие FK и отказывается работать с таблицами, в которых они присутствуют? Чудное решение...

     
     
  • 4.7, filosofem (ok), 16:51, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Смотреть там не на что. Прямая ссылка на 1000 строк кода на похапэ под BSDL.
    По FK запрос к схеме на предмет ключей и если есть, то отказать. Очень нужная подачка.
     

  • 1.3, Аноним (-), 15:44, 22/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а чо удалить предварительно ключи никак ?

    там же написано на коде какой утилиты и какого набора этого строится .. наверняка это плевое дело .

     
  • 1.4, andy (??), 16:10, 22/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    А наши социальные сети odnoklassniki.ru и vkontakte.ru, открывают свои доработки?
     
     
  • 2.8, anthonio (ok), 16:56, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +8 +/
    а что у них есть _свои_ наработки? :)
     
     
  • 3.9, ixti (ok), 17:13, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Автор предудущего поста весьма точно описал что у них свои не _наработки_ а _доработки_ :)) Хотя я бы ещё приставочку "не" добавил, чтоб уж совсем правда была :))
     

  • 1.5, Аноним (-), 16:26, 22/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    (Оффтопик, в общем-то)

    > ... по словам представителя Facebook ... на тысячах серверов проекта ...

    На ТЫСЯЧАХ! :)

    (В оригинале - "across its sea of MySQL servers", т.е. их просто "море", а не тысячи)

     
     
  • 2.10, Антон (??), 19:11, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Читайте внимательно, там сказано "X тысяч":

    "...company runs "X thousands" of MySQL servers."

    еще несколько цитат на тему числа серверов в FaceBook:
    "the load on our thousands of servers continues to increase at a pretty astounding rate"
    "Facebook: 30000 databases, 1800 db servers"

    http://venublog.com/2008/04/16/notes-from-scaling-mysql-up-or-out/
    http://blog.facebook.com/blog.php?post=7899307130

     
     
  • 3.11, klalafuda (?), 19:25, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +/

    С такими кастомерами MySQL явно далеко до стагнации. Причем что фейсбук далеко не единственные.
     
     
  • 4.12, Avator (ok), 21:44, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а вы уверенны что они кастомеры??? Мне кажется они её поддерживать своими силами вполне могут...
     
     
  • 5.13, klalafuda (?), 21:54, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > а вы уверенны что они кастомеры??? Мне кажется они её поддерживать своими силами вполне могут...

    А смысл? Поле деятельности фейсбука лежит мягко говоря в совсем другой стороне. Зачем им держать отдельный коллектив, который будет заниматься разработкой RDBMS? Если проще и дешевле отдать это на аутсорс == купить поддержку у мускуля. С таким же успехом они и 'Linux смогут поддерживать' :) Но зачем..

     
     
  • 6.14, AlexGor (??), 23:07, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    поле деятельности google тоже явно не в той стороне. что не мешает им "держать отдельный коллектив", в.т.ч. и для поддержки linux.
     
     
  • 7.15, klalafuda (?), 23:11, 22/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > поле деятельности google тоже явно не в той стороне. что не мешает им "держать отдельный коллектив", в.т.ч. и для поддержки linux.

    Боюсь, масштабы гугла и фейсбука несколько не сопоставимые. А, главное, масштабы их хотелок. Поэтому гугл - это гугла, а фейсбук - это фейсбук. Не думаю, что последний ставит перед собой задачи завоевания Галактики и тд и тп. Ребята просто работают на волне. Без особых претензий.

     
     
  • 8.16, AlexGor (??), 00:00, 23/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    ага набрали полмиллиарда пользователей, без особых претензий в gmail и соотве... текст свёрнут, показать
     
     
  • 9.18, klalafuda (?), 16:13, 23/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Про полмиллиарда пользователей - это они вам сами сказали Они соврали У них ка... текст свёрнут, показать
     
     
  • 10.21, agent_007 (ok), 20:43, 25/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    ну естественно подобного рода данные публикуют многие компании не вижу причин,... текст свёрнут, показать
     
  • 3.20, StrangeAttractor (ok), 20:24, 23/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > "...company runs "X thousands" of MySQL servers."

    Я тоже "runs X thousands of MySQL servers" при X = 0.005 :-)

     

  • 1.17, Аноним (-), 14:30, 23/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Какой-то странный костыль, а почему не создать новую таблицу и не переносить туда записи. Параллельно используя представления (VIEW) для выборки данных из обоих таблиц???
     
     
  • 2.19, Евгений (??), 16:26, 23/09/2010 [^] [^^] [^^^] [ответить]  
  • +/
    из-за блокировки?
     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру