Система контроля версий - не только для кода, но и для данных PDF Печать E-mail

(В оригинале - Control the data, not just the code)

Системы контроля версий и непрерывная интеграция – превосходные инструменты для управления процессом разработки и внедрения приложения. Вместе с исходным кодом, изменение в схеме БД часто оказывается существенным куском процесса, поэтому логично, что хорошо бы к этой части применять те же принципы контроля. Если в вашем процессе сборки и релиза есть список тщательно отлаженных шагов, требуемых для миграции данных, то будьте осторожны. Некоторые такие списки всегда будут заставлять вас скрещивать пальцы в ожидании результата. Такой список может выглядеть как-то так:

  1. Создать список скриптов, которые нужно запустить, в нужном порядке
  2. Отправить скрипты ответственному за БД
  3. Ответственный за БД копирует скрипты туда, где их запустит планировщик
  4. Проверить логи выполнения скриптов и помолиться, что запустились все скрипты, потому что вы не уверены в том, что получится, если их запустить еще раз
  5. Запустить проверочный скрипт и выборочно проверить данные
  6. Запустить регрессионные тесты приложения и найти причины ошибок
  7. Написать скрипты, исправляющие найденные проблемы в данных
  8. Повторить с самого начала


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

Такая сложная работа создает множество возможностей для того, чтобы развалить процесс. Еще хуже то, что ошибки миграции данных не всегда могут быть обнаружены юнит-тестами и проявляют себя уже после выпуска релиза. Проблемы в базе данных приходится исправлять вручную, а их решения – сложно проверяемые. Ценность полностью автоматического процесса, способного вернуть базу данных в известное состояние становится особенно очевидной, когда вам нужно восстановить систему после неудавшейся миграции. Если вы не можете «убить» базу данных и восстановить ее в состояние, совместимое с конкретной версией приложения, то у вас те же самые проблемы, как если бы вы не могли вернуться назад после изменения в исходном коде.

Изменения базы данных не должно нарушать ваш процесс сборки. Вы должны быть в состоянии собрать все приложение целиком, включая базу данных. Сделайте базу данных неотъемлемой частью автоматизированной сборки и тестирования на начальном этапе разработки, и добавьте кнопку «Вернуться назад». Это принесет вам серьезные дивиденты. В лучшем случае это сохранит вам много часов болезненного решения проблем после сбоя в ночной сборке. В худшем случае это позволит вашей команде уверенно двигаться вперед, спокойно меняя при необходимости структуру базы данных.

Автор оригинала - Chad LaVigne