2009-04-15 5 views
3

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

Кажется, есть два пути:

  1. Используйте миграционную сценарий, который может либо запустить вручную из командной строки или как часть автоматического развертывания/процесс построения
  2. Запускаем миграции, когда приложение запускается (я использую ASP.NET, так это можно сделать достаточно легко, без вызывает запрос затянувшийся пользователя)

Есть ли у кого-нибудь какие-либо предложения/понимание/опыт с этими подходами? Любые другие предложения?

Я вижу, почему № 1 может быть более привлекательным - это дает мне полный контроль над обновлением базы данных. Тем не менее, мне очень нравится # 2, так как он позволяет мне быстро выполнять итерации между развертываниями и уменьшать ручной процесс. # 2 можно также использовать на моей машине разработки, чтобы позволить еще более быстрые итерации. Хм, начинаю думать, что оба могут быть хорошими ...

ответ

1

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

2

У нас есть система продаж с клиентом ~ 100, и мы обновляем базу данных при запуске приложения (правда, это настольное приложение.) Мне нравится этот подход, он безопасен и итеративен, если у нас есть неопределенная начальная точка (это клиентская база данных новая или обновляется только для проверки xyz?).

Но на серверах я предпочитаю вариант # 1: мы создаем файл запроса SQL на нашей виртуальной машине (на основе копии исходной базы данных) и запускаем этот запрос на реальном сервере.

Так ИМХО:

  • Отключенные клиенты: запуска, итерационные скрипты
  • Сервер: запрос создается на VM на основе фактической и реальной базы

Так что я в этой проблеме тоже, и найдите некоторые (половинные) рамки как RikMigrations. После некоторого поиска в Интернете есть хорошее начало в области управления версиями/миграцией БД: .NET Database Migration Tool Roundup. Не обязательно документация, но блоги команды могут быть интересными.

+0

Вы также можете посмотреть следующее: http://code.google.com/p/octalforty-wizardby/ –

+0

интересный материал. благодаря – cherouvim

0

Я бы предпочел вариант №1 по ряду причин. Во-первых, интеграционные тесты обычно требуют, чтобы ваша схема БД была актуальной, и запуск веб-сайта для обновления схемы будет огромным timewaster. Во-вторых, вы не можете изменить схему базы данных во время работы вашего сайта (скажем, добавить пару индексов, чтобы ускорить работу).

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

И если вы ищете инфраструктуру миграции, взгляните на Wizardby.

0

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

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