Школа
Веб-разработка

Меня интересует вопрос миграции базы данных

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

Как это организовано у вас, какие инструменты используете?

Виктор Карпов
6 мар 2013
👁 2743   🗩1
Веб-разработка

Меня интересует вопрос миграции базы данных

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

Как это организовано у вас, какие инструменты используете?

Виктор Карпов
6 мар 2013
👁 2743   🗩1
Коля Митин
Разработчик
Полезно
  
Непонятно
  
Войдите в Бюросферу, чтобы голосовать

В последнее время я всерьёз озадачен отношениями кода и данных. Есть множество систем управления данными: реляционных и безэскуэльных. Разработчики ломают копья, выясняя, какая из них быстрее пишет и читает данные, расходует меньше оперативной памяти, проводит меньше дисковых операций. Но во времена, когда «Ватсон» закончил медвуз и отправился лечить людей, ни одна популярная система управления данными не может проанализировать лог запросов к самой себе и банально расставить нужные индексы. Вместо этого она предоставляет мегатонны отличного конфига с миллиардом настроек, предлагая администраторам продираться через дебри ридми, хауту и факъю.

Я применяю концепцию полной абстракции от СУБД, где данные представлены в коде, как объекты и связи между ними. Объект — представление строки из таблицы в виде класса со свойствами, соответсвующими её полям. Связь — представление таблицы, которая хранит идентификаторы связаных объектов. Очень важно, что связи не хранятся в самих объектах, так как по умолчанию они все «многие‑ко‑многим» и не имеют направления.

Вся работа с объектами и связями осуществляется через веб‑интерфейс. Одним из приятных бонусов является удобное распространение изменений. Помимо изменения базы данных, веб‑интерфейс ведёт лог изменений базы данных в формате эскуэль‑запросов. Этот лог используется в другой копии проекта для применения этих изменений. Процесс запускается два раза. Первый — «сухой прогон», изменения симулируются. Система проверяет, нет ли конфликтов. Если нет, то запускает второй прогон и изменяет базу данных. Если конфликты есть, то выводит их описание и останавливает процесс.

По моему опыту, большинство конфликтов случается из‑за несоблюдения технологического процесса и гайдлайнов разработки. Предупредить их можно хорошим фреймворком. И я говорю не о «Рельсах», «Симфони», «Иии» или «Зенде», а о системе работы: оформлении кода, именовании переменных, правилах вёрстки, написании документации, передаче работы друг другу.

Это был совет о разработке программных интерфейсов. Хотите узнать всё об умной вёрстке, правильных скриптах, грациозной деградации, трюках и работе технолога с дизайнером? Присылайте вопросы.

Веб‑разработка
Полезно
  
Непонятно
  
Войдите в Бюросферу, чтобы голосовать
Отправить
Поделиться
Поделиться
Запинить
Твитнуть

Комментарии

В простом случае пишутся сиквел‑скрипты, которые умеют переводить базу версии n в базу версии n+1. Текущая версия базы хранится в специальной колонке. При запуске приложения модуль миграции вычисляет, какие миграции нужно запускать и последовательно их выполняет, инкрементируя номер версии в колонке.

Многие современные фреймворки объектно‑реляционного мэппинга часто умеют выполнять миграции сами при изменении мэппингов. «Хибернейт» и «Энтити фреймворк» так умеют. Некоторые фреймворки представляют встроенные инструменты миграции, хотя и не генерируют миграции автоматически. Например, облегчает работу с миграциями Руби‑он‑рейлс.

Немного сложней обстоит дело, если у продукта несколько модификаций (например, есть базовая версия продукта и кастомизации под каждого из клиентов). Тогда главное — обеспечить запуск миграций в нужном порядке. Без синхронизации команд разработки базового продукта и кастомизаций тут почти всегда не обойтись.

Цель рубрики — обсуждение вопросов дизайна, веб-разработки, переговоров, редактуры и управления.
Комментарии модерируются. Мы публикуем комментарии, которые добавляют к уже сказанному новые мысли и хорошие примеры.

Рекомендуем другие советы