Как вы управляете ревизиями базы данных в проекте среднего размера с филиалами?

StackOverflow https://stackoverflow.com/questions/156044

Вопрос

На работе у нас есть 4 человека, которые работают вместе над несколькими разными проектами.Для каждого проекта у каждого из нас есть локальная копия, над которой мы работаем, а затем идет разработка, промежуточный этап и оперативное развертывание, наряду с любыми имеющимися у нас ветвями (мы используем subversion).Нашей базой данных является MySQL.

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

Это было полезно?

Решение

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

Я верю Рейлс сделал это первым.

Java имеет по крайней мере, один проект.

И вот такой Библиотека миграции .NET.

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

Возможно, другие могут предложить другие библиотеки миграции.

Ваше здоровье.

Редактировать:Смотрите также https://stackoverflow.com/questions/313/net-migrations-engine и Обзор инструмента миграции базы данных .NET (из поста выше).

Другие советы

http://odetocode.com/Blogs/scott/archive/2008/01/30/11702.aspx

Приведенный выше блог привел нас к нашей текущей системе контроля версий базы данных.Проще говоря, никакие изменения в базе данных не вносятся без скрипта обновления, и все скрипты обновления находятся в нашем репозитории системы управления версиями.

Мы управляем только изменениями схемы, но вы также можете / захотеть рассмотреть возможность сохранения дампов ваших данных доступными и в системе управления версиями;создание таких файлов - довольно тривиальное упражнение с использованием mysqldump.

Наше решение отличается от решения, представленного в блоге, одним ключевым моментом:это не автоматизировано.Мы должны вручную применять обновления базы данных и т.д.Хотя это может занять немного времени, это отложило часть усилий, которые потребовались бы для создания полностью автоматизированной системы.Однако одна вещь, которую мы автоматизировали, - это отслеживание версии базы данных в программном обеспечении:это было довольно просто, и это гарантирует, что наше программное обеспечение знает о базе данных, с которой оно работает, и будет работать ТОЛЬКО в том случае, если оно знает схему, с которой работает.

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

Мы храним все наши скрипты базы данных (data и schema / ddl) в системе управления версиями.Мы также ведем центральный каталог изменений.Когда разработчик вносит изменения в файл схемы / DDL или добавляет скрипт, который каким-либо образом изменяет данные, эти файлы добавляются в каталог вместе с номером фиксации SVN.

Мы создали небольшую собственную утилиту, которая считывает изменения в каталоге и создает большой сценарий обновления на основе содержимого каталога, извлекая содержимое из каждой редакции каталога и применяя их.Концепция очень похожа на Развертывание DBDeploy инструмент, который, как я полагаю, изначально был создан Мыслительные работы, так что, возможно, вы сможете его использовать.Это, по крайней мере, даст вам хорошую отправную точку, с которой вы сможете настроить решение, более соответствующее вашим потребностям.

Желаю удачи!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top