SlideShare une entreprise Scribd logo
1  sur  23
Автоматическое
версионирование
и релиз баз данных
             ...для умников =)
Попробуем найти ответы на следующие вопросы:
  ➲ Зачем нужно автоматизировать процесс релиза
     изменений в БД?
  ➲ Зачем нужна изоляция personal / dev / test / staging
     / production окружений?
  ➲ Зачем нужен continious integration процесс?
  (сломал-увидел-починил)
  ➲ Как сделать процесс внесения изменений в
     структуру БД предсказуемым?
  ➲ Как полноценно включить БД в continious
     integration процесс?
  ➲ Как поддерживать синхронизацию приложения и
     БД на всех окружениях?
Зачем нужно автоматизировать процесс
       релиза изменений в БД?
Зачем нужна изоляция
       personal
          dev
          test
        staging
      production
     окружений?
Зачем нужен continious integration процесс?
        (сломал-увидел-починил)
Hello. Am I at the office?!
 Certainly I am. I sleep on
 the operating table!
                               Как сделать процесс внесения
                                 изменений в структуру БД
                                     предсказуемым?
Как поддерживать синхронизацию приложения и БД
              на всех окружениях?
Модель слияния «под релиз»
 (ad hoc merging model)
➲ Эта модель разработки позволяет небольшим командам разработчиков
  вносить изменения в одну и ту же целевую БД, при этом каждый из них
  работает со своим изолированным экземпляром БД.
➲ Поскольку разработчики работают с личной БД они могут проводить отладку
  своих изменений в изоляции.
➲ Не нужно вносить никаких ручных правок. Достаточно по завершению
  разработки фичи сделать diff между рабочей и целевой БД и получить SQL с
  изменениями.
➲ Велика вероятность конфликтов слияния изменений, поскольку разработчики
  синхронизируют свои изменения с одной и той же целевой БД. Если
  разработчики внесут изменения в один и тот же объект, о велика вероятность
  что эти изменения будут бесследно потеряны во время синхронизации.
➲ Повышаются требования по координации слияний в целевую БД, их
  периодичность должна быть адекватна интенсивности вносимых изменений.
➲ Нет управления версиями на уровне объектов БД. Если был обнаружен баг, то
  становится очень сложно определить что именно привело к его возникновению.
  Кроме того операция отката БД на предыдущую версию без ручного
  вмешательства будет означать потерю всех изменений текущего релиза.
Версионировние и слияние на уровне объектов
 схемы БД
➲   Каждый индивидуальный объект схемы БД наховится в виде отдельного скрипта
    в системе контроля версий, что позволяет прослеживать историю изменений
    конкретного объекта.
➲   Разработчики как и в предыдущей модели работают напрямую с живой БД, что
    упрощает отладку изменений.
➲   Можно использовать некоторые возможности системы контроля для управления
    проектом. Например во время коммита оставлять комментарии и прочую
    информацию на уровне отдельных объектов схемы БД.
➲   Можно устанавливать блокировку изменений на уровне отдельных скриптов во
    время внесения изменений, если данные возможности есть у системы контроля
    версий.
➲   В случае параллельной разработки конфликты слияний разрешаются намного
    проще за счет того что изменения носят мелкодисперсный характер.


➲ Использование этой модели накладывает большую дисциплинированность и
  более формальный подход, что может быть неудобно разработчикам, которые
  работают в более динамичном режиме.
Оффлайн модель
  разработки
Оффлайн модель разработки
➲ Прямое редактирование скриптов, которые находятся под системой
  контроля версий в некоторых случаях может быть преимуществом (привет
  унылым клиентам TFS, VSS).
➲ Этот процесс уменьшает вероятность одновременного редактирования
  одного и того же скрипта в большей степени чем в предыдущей модели.
➲ Продвинутые SQL diff-инструменты типа SQL Compare 6 Professional
  автоматически определяет последовательность выполнения этих скриптов на
  целевой БД принимая во внимание их связи.


➲ Отсутствует немедленная проверка изменений, поскольку они вначале должны
  быть внесены в скрипт, а уже потом на тестовую БД.
➲ Для того чтобы проверить изменения их нужно применить к тестовой БД, что
  добавляет дополнительный шаг.
Модель инкрементных изменений
          (database migrations)
SQL-based db migrator   DSL-based db migrator
RoundhousE db versioning tools
    (part of the ChuckNorrisFramework)
➲ Name: Chuck Norris
➲ Email:
  chucknorrisframework@googlegroups.co
  m
➲ Website:
  http://groups.google.com/group/chucknor
  risframework
➲ Location: Chuck is everywhere
➲ Project: https://github.com/chucknorris/
   roundhouse
Основные возможности RoundhousE

 ➲ Поддерживает Microsoft SQL Server, Oracle,
   Access
 ➲ MySQL объявлен как alpha (моя реализация,
   которая была обкатана на проекте
   TravelConfirm)
 ➲ Заявлена поддержка PostgreSQL, SQLite
 ➲ Использует SQL для миграций БД
 ➲ Рализована на .NET, использует NHibernate
   (могу портировать на другую СУБД или на
   Mono/Linux/Mac OS X)
 ➲ Open source, лицензирована под Apache 2.0
Уникальные возможности RoundhousE
➲ Обладает достаточно умным поведением
➲ В большей степени дружественна к DBA чем другие SQL-
  based миграторы
➲ Освобождает от написания патчей/миграций для stateless
  скриптов
➲ Все скрипты разделяет на OneTime, AnyTime, Everytime
➲ Поддерживает скрипты, которые зависят от окружения
➲ Крайне рекомендована проектам с большим количеством
  процедур, функций и представлений
➲ Вместо одного каталога со свалкой миграций их несколько
  — baseline, up, functions, procedures, functions
➲ Подробное логирование процесса миграции БД
➲ Подробная регистрация успешных и неудачных миграций
Running RoundhousE v0.8.0.305 against (local) - TestRoundhousE.
Looking in C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousE for
scripts to run.
Please press enter when ready to kick...
==================================================
Setup, Backup, Create/Restore/Drop
==================================================
Creating TestRoundhousE database on (local) server if it doesn't exist.
==================================================
RoundhousE Structure
==================================================
 Running database type specific tasks.
 Creating RoundhousE schema if it doesn't exist.
 Creating [Version] table if it doesn't exist.
 Creating [ScriptsRun] table if it doesn't exist.
 Creating [ScriptsRunErrors] table if it doesn't exist.
==================================================
Versioning
==================================================
 Attempting to resolve version from
C:coderoundhousecode_dropsampledeployment_BuildInfo.xml using //buildInfo/version.
 Found version 0.8.0.305 from C:coderoundhousecode_dropsampledeployment_BuildInfo.xml.
 Migrating TestRoundhousE from version 0 to 0.8.0.305.
 Versioning TestRoundhousE database with version 0.8.0.305 based on
http://roundhouse.googlecode.com/svn.
==================================================
Migration Scripts
==================================================
Looking for Update scripts in
"C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEup". These
should be one time only scripts.
--------------------------------------------------
 Running 0001_CreateTables.sql on (local) - TestRoundhousE.
 Running 0001_CreateTables_NH.sql on (local) - TestRoundhousE.
 Running 0002_ChangeTable.sql on (local) - TestRoundhousE.
 Running 0003_TestBatchSplitter.sql on (local) - TestRoundhousE.
--------------------------------------------------
Looking for Run First After Update scripts in
"C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousErunFirstAfte
rUp".
--------------------------------------------------
--------------------------------------------------
Looking for Function scripts in
"C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEfunctions".
--------------------------------------------------
 Running ufn_GetDate.sql on (local) - TestRoundhousE.
--------------------------------------------------
Looking for View scripts in
"C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEviews".
--------------------------------------------------
 Running vw_Dude.sql on (local) - TestRoundhousE.
--------------------------------------------------
Looking for Stored Procedure scripts in
"C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEsprocs".
--------------------------------------------------
 Running usp_GetDate.sql on (local) - TestRoundhousE.
 Running usp_SelectTimmy.sql on (local) - TestRoundhousE.
--------------------------------------------------
Looking for Run after Other Anytime Scripts scripts in
"C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousErunAfterOt
herAnyTimeScripts".
--------------------------------------------------
 Running createFiveItems.sql on (local) - TestRoundhousE.
--------------------------------------------------
Looking for Permission scripts in
"C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEpermissions
". These scripts will run every time.
--------------------------------------------------
 Running 0001_AppRole.sql on (local) - TestRoundhousE.
 Running 0002_AppReadOnlyRole.sql on (local) - TestRoundhousE.
 Running 0003_AppPermissionsWiring.sql on (local) - TestRoundhousE.
 LOCAL.GrantRobDataReaderDataWriterPermissions.ENV.sql is an environment file. We are in the
LOCAL environment. This will run based on this check.
 Running LOCAL.GrantRobDataReaderDataWriterPermissions.ENV.sql on (local) - TestRoundhousE.
 TEST.GrantRobDataReaderDataWriterPermissions.ENV.sql is an environment file. We are in the
LOCAL environment. This will NOT run based on this check.
 Skipped TEST.GrantRobDataReaderDataWriterPermissions.ENV.sql - No changes were found to run.
RoundhousE ведет
подробную регистрацию SQL-скриптов
RoundhousE отслеживает ситуации когда
OneTime скрипт был обновлен
Вопросы?




           31337

Contenu connexe

Tendances

Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И... Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...Тарасов Константин
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Ontico
 
Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Александр Ежов
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskAlex Chistyakov
 
Презентация Git-flow (на русском)
Презентация Git-flow (на русском)Презентация Git-flow (на русском)
Презентация Git-flow (на русском)Sergey Chudakov
 
рентабельный код
рентабельный кодрентабельный код
рентабельный кодMax Arshinov
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17OdessaFrontend
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"IT Event
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42DevDay
 
Фламп на спидах или ка релизить каждый день
Фламп на спидах или ка релизить каждый деньФламп на спидах или ка релизить каждый день
Фламп на спидах или ка релизить каждый деньDevDay
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27MoscowJS
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис ПаясьCodeFest
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...Andriy Yun
 
Конструктор согласований Docsvision
Конструктор согласований DocsvisionКонструктор согласований Docsvision
Конструктор согласований DocsvisionDocsvision
 
50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...
50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...
50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...Валерий Павлович Сысик
 

Tendances (20)

Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И... Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)
 
Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015
 
Performance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon SaranskPerformance engineering stories from #fdminicon Saransk
Performance engineering stories from #fdminicon Saransk
 
Презентация Git-flow (на русском)
Презентация Git-flow (на русском)Презентация Git-flow (на русском)
Презентация Git-flow (на русском)
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)Cистемы автоматической сборки проектов (Полина Фоминых)
Cистемы автоматической сборки проектов (Полина Фоминых)
 
Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)Непрерывная интеграция (Марина Пестова)
Непрерывная интеграция (Марина Пестова)
 
рентабельный код
рентабельный кодрентабельный код
рентабельный код
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
 
«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42«DevOps — это о передаче смысла» — Александр Титов, Express 42
«DevOps — это о передаче смысла» — Александр Титов, Express 42
 
Фламп на спидах или ка релизить каждый день
Фламп на спидах или ка релизить каждый деньФламп на спидах или ка релизить каждый день
Фламп на спидах или ка релизить каждый день
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
 
Software Development
Software DevelopmentSoftware Development
Software Development
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
Comfortable drupal project development. Useful modules (Andriy Yun, studio de...
 
Конструктор согласований Docsvision
Конструктор согласований DocsvisionКонструктор согласований Docsvision
Конструктор согласований Docsvision
 
50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...
50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...
50 команд как одна команда. Как в компании Петер-Сервис боролись за согласова...
 

En vedette

Sql Database Migration
Sql Database MigrationSql Database Migration
Sql Database MigrationPollus Brodeur
 
Борис Трофимов. Continuous Database migration-это просто!
Борис Трофимов. Continuous Database migration-это просто!Борис Трофимов. Continuous Database migration-это просто!
Борис Трофимов. Continuous Database migration-это просто!Volha Banadyseva
 
TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...
TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...
TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...Iosif Itkin
 
PHP Tour 2016 Phinx Presentation
PHP Tour 2016 Phinx PresentationPHP Tour 2016 Phinx Presentation
PHP Tour 2016 Phinx PresentationRob Morgan
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Tanya Denisyuk
 
Database migration simple, cross-engine and cross-platform migrations with ...
Database migration   simple, cross-engine and cross-platform migrations with ...Database migration   simple, cross-engine and cross-platform migrations with ...
Database migration simple, cross-engine and cross-platform migrations with ...Amazon Web Services
 
Database-Migration and -Upgrade with Transportable Tablespaces
Database-Migration and -Upgrade with Transportable TablespacesDatabase-Migration and -Upgrade with Transportable Tablespaces
Database-Migration and -Upgrade with Transportable TablespacesMarkus Flechtner
 

En vedette (11)

Xml
XmlXml
Xml
 
Sql Database Migration
Sql Database MigrationSql Database Migration
Sql Database Migration
 
Борис Трофимов. Continuous Database migration-это просто!
Борис Трофимов. Continuous Database migration-это просто!Борис Трофимов. Continuous Database migration-это просто!
Борис Трофимов. Continuous Database migration-это просто!
 
TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...
TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...
TMPA-2013 Zhuravlev: Data Migration between DBMS Using Cryptographic Hash Fun...
 
PHP Tour 2016 Phinx Presentation
PHP Tour 2016 Phinx PresentationPHP Tour 2016 Phinx Presentation
PHP Tour 2016 Phinx Presentation
 
Database Migration
Database MigrationDatabase Migration
Database Migration
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
 
Database migration simple, cross-engine and cross-platform migrations with ...
Database migration   simple, cross-engine and cross-platform migrations with ...Database migration   simple, cross-engine and cross-platform migrations with ...
Database migration simple, cross-engine and cross-platform migrations with ...
 
Database migration
Database migrationDatabase migration
Database migration
 
Models for hierarchical data
Models for hierarchical dataModels for hierarchical data
Models for hierarchical data
 
Database-Migration and -Upgrade with Transportable Tablespaces
Database-Migration and -Upgrade with Transportable TablespacesDatabase-Migration and -Upgrade with Transportable Tablespaces
Database-Migration and -Upgrade with Transportable Tablespaces
 

Similaire à Database automated deployment and versioning ...for smart people

Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработкиAnna Fedoruk
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияOvadiah Myrgorod
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовАгентство AlterEGO
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven developmentTestableapple
 
управление сборками и развертыванием веб приложений
управление сборками и развертыванием веб приложенийуправление сборками и развертыванием веб приложений
управление сборками и развертыванием веб приложенийSergii Shmarkatiuk
 
Continous Integration
Continous IntegrationContinous Integration
Continous IntegrationGetDev.NET
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 
Разработка БД с использованием инструментов MS VS 2010
Разработка БД с использованием инструментов MS VS 2010Разработка БД с использованием инструментов MS VS 2010
Разработка БД с использованием инструментов MS VS 2010Александр Шамрай
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.DrupalForumZP2012
 
Анти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграцииАнти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграцииSQALab
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYPavel Tsukanov
 
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgЕвгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgAlina Vilk
 

Similaire à Database automated deployment and versioning ...for smart people (20)

Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровождения
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектов
 
презентация.1
презентация.1презентация.1
презентация.1
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven development
 
управление сборками и развертыванием веб приложений
управление сборками и развертыванием веб приложенийуправление сборками и развертыванием веб приложений
управление сборками и развертыванием веб приложений
 
Continous Integration
Continous IntegrationContinous Integration
Continous Integration
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
 
Разработка БД с использованием инструментов MS VS 2010
Разработка БД с использованием инструментов MS VS 2010Разработка БД с использованием инструментов MS VS 2010
Разработка БД с использованием инструментов MS VS 2010
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.
 
Анти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграцииАнти шаблоны непрерывной интеграции
Анти шаблоны непрерывной интеграции
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
 
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgЕвгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
 

Database automated deployment and versioning ...for smart people

  • 2. Попробуем найти ответы на следующие вопросы: ➲ Зачем нужно автоматизировать процесс релиза изменений в БД? ➲ Зачем нужна изоляция personal / dev / test / staging / production окружений? ➲ Зачем нужен continious integration процесс? (сломал-увидел-починил) ➲ Как сделать процесс внесения изменений в структуру БД предсказуемым? ➲ Как полноценно включить БД в continious integration процесс? ➲ Как поддерживать синхронизацию приложения и БД на всех окружениях?
  • 3. Зачем нужно автоматизировать процесс релиза изменений в БД?
  • 4. Зачем нужна изоляция personal dev test staging production окружений?
  • 5. Зачем нужен continious integration процесс? (сломал-увидел-починил)
  • 6. Hello. Am I at the office?! Certainly I am. I sleep on the operating table! Как сделать процесс внесения изменений в структуру БД предсказуемым?
  • 7. Как поддерживать синхронизацию приложения и БД на всех окружениях?
  • 8.
  • 9. Модель слияния «под релиз» (ad hoc merging model) ➲ Эта модель разработки позволяет небольшим командам разработчиков вносить изменения в одну и ту же целевую БД, при этом каждый из них работает со своим изолированным экземпляром БД. ➲ Поскольку разработчики работают с личной БД они могут проводить отладку своих изменений в изоляции. ➲ Не нужно вносить никаких ручных правок. Достаточно по завершению разработки фичи сделать diff между рабочей и целевой БД и получить SQL с изменениями. ➲ Велика вероятность конфликтов слияния изменений, поскольку разработчики синхронизируют свои изменения с одной и той же целевой БД. Если разработчики внесут изменения в один и тот же объект, о велика вероятность что эти изменения будут бесследно потеряны во время синхронизации. ➲ Повышаются требования по координации слияний в целевую БД, их периодичность должна быть адекватна интенсивности вносимых изменений. ➲ Нет управления версиями на уровне объектов БД. Если был обнаружен баг, то становится очень сложно определить что именно привело к его возникновению. Кроме того операция отката БД на предыдущую версию без ручного вмешательства будет означать потерю всех изменений текущего релиза.
  • 10.
  • 11. Версионировние и слияние на уровне объектов схемы БД ➲ Каждый индивидуальный объект схемы БД наховится в виде отдельного скрипта в системе контроля версий, что позволяет прослеживать историю изменений конкретного объекта. ➲ Разработчики как и в предыдущей модели работают напрямую с живой БД, что упрощает отладку изменений. ➲ Можно использовать некоторые возможности системы контроля для управления проектом. Например во время коммита оставлять комментарии и прочую информацию на уровне отдельных объектов схемы БД. ➲ Можно устанавливать блокировку изменений на уровне отдельных скриптов во время внесения изменений, если данные возможности есть у системы контроля версий. ➲ В случае параллельной разработки конфликты слияний разрешаются намного проще за счет того что изменения носят мелкодисперсный характер. ➲ Использование этой модели накладывает большую дисциплинированность и более формальный подход, что может быть неудобно разработчикам, которые работают в более динамичном режиме.
  • 12. Оффлайн модель разработки
  • 13. Оффлайн модель разработки ➲ Прямое редактирование скриптов, которые находятся под системой контроля версий в некоторых случаях может быть преимуществом (привет унылым клиентам TFS, VSS). ➲ Этот процесс уменьшает вероятность одновременного редактирования одного и того же скрипта в большей степени чем в предыдущей модели. ➲ Продвинутые SQL diff-инструменты типа SQL Compare 6 Professional автоматически определяет последовательность выполнения этих скриптов на целевой БД принимая во внимание их связи. ➲ Отсутствует немедленная проверка изменений, поскольку они вначале должны быть внесены в скрипт, а уже потом на тестовую БД. ➲ Для того чтобы проверить изменения их нужно применить к тестовой БД, что добавляет дополнительный шаг.
  • 14. Модель инкрементных изменений (database migrations) SQL-based db migrator DSL-based db migrator
  • 15. RoundhousE db versioning tools (part of the ChuckNorrisFramework) ➲ Name: Chuck Norris ➲ Email: chucknorrisframework@googlegroups.co m ➲ Website: http://groups.google.com/group/chucknor risframework ➲ Location: Chuck is everywhere ➲ Project: https://github.com/chucknorris/ roundhouse
  • 16. Основные возможности RoundhousE ➲ Поддерживает Microsoft SQL Server, Oracle, Access ➲ MySQL объявлен как alpha (моя реализация, которая была обкатана на проекте TravelConfirm) ➲ Заявлена поддержка PostgreSQL, SQLite ➲ Использует SQL для миграций БД ➲ Рализована на .NET, использует NHibernate (могу портировать на другую СУБД или на Mono/Linux/Mac OS X) ➲ Open source, лицензирована под Apache 2.0
  • 17. Уникальные возможности RoundhousE ➲ Обладает достаточно умным поведением ➲ В большей степени дружественна к DBA чем другие SQL- based миграторы ➲ Освобождает от написания патчей/миграций для stateless скриптов ➲ Все скрипты разделяет на OneTime, AnyTime, Everytime ➲ Поддерживает скрипты, которые зависят от окружения ➲ Крайне рекомендована проектам с большим количеством процедур, функций и представлений ➲ Вместо одного каталога со свалкой миграций их несколько — baseline, up, functions, procedures, functions ➲ Подробное логирование процесса миграции БД ➲ Подробная регистрация успешных и неудачных миграций
  • 18. Running RoundhousE v0.8.0.305 against (local) - TestRoundhousE. Looking in C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousE for scripts to run. Please press enter when ready to kick... ================================================== Setup, Backup, Create/Restore/Drop ================================================== Creating TestRoundhousE database on (local) server if it doesn't exist. ================================================== RoundhousE Structure ================================================== Running database type specific tasks. Creating RoundhousE schema if it doesn't exist. Creating [Version] table if it doesn't exist. Creating [ScriptsRun] table if it doesn't exist. Creating [ScriptsRunErrors] table if it doesn't exist. ================================================== Versioning ================================================== Attempting to resolve version from C:coderoundhousecode_dropsampledeployment_BuildInfo.xml using //buildInfo/version. Found version 0.8.0.305 from C:coderoundhousecode_dropsampledeployment_BuildInfo.xml. Migrating TestRoundhousE from version 0 to 0.8.0.305. Versioning TestRoundhousE database with version 0.8.0.305 based on http://roundhouse.googlecode.com/svn.
  • 19. ================================================== Migration Scripts ================================================== Looking for Update scripts in "C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEup". These should be one time only scripts. -------------------------------------------------- Running 0001_CreateTables.sql on (local) - TestRoundhousE. Running 0001_CreateTables_NH.sql on (local) - TestRoundhousE. Running 0002_ChangeTable.sql on (local) - TestRoundhousE. Running 0003_TestBatchSplitter.sql on (local) - TestRoundhousE. -------------------------------------------------- Looking for Run First After Update scripts in "C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousErunFirstAfte rUp". -------------------------------------------------- -------------------------------------------------- Looking for Function scripts in "C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEfunctions". -------------------------------------------------- Running ufn_GetDate.sql on (local) - TestRoundhousE. -------------------------------------------------- Looking for View scripts in "C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEviews". -------------------------------------------------- Running vw_Dude.sql on (local) - TestRoundhousE. --------------------------------------------------
  • 20. Looking for Stored Procedure scripts in "C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEsprocs". -------------------------------------------------- Running usp_GetDate.sql on (local) - TestRoundhousE. Running usp_SelectTimmy.sql on (local) - TestRoundhousE. -------------------------------------------------- Looking for Run after Other Anytime Scripts scripts in "C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousErunAfterOt herAnyTimeScripts". -------------------------------------------------- Running createFiveItems.sql on (local) - TestRoundhousE. -------------------------------------------------- Looking for Permission scripts in "C:coderoundhousecode_dropsampledeployment..dbSQLServerTestRoundhousEpermissions ". These scripts will run every time. -------------------------------------------------- Running 0001_AppRole.sql on (local) - TestRoundhousE. Running 0002_AppReadOnlyRole.sql on (local) - TestRoundhousE. Running 0003_AppPermissionsWiring.sql on (local) - TestRoundhousE. LOCAL.GrantRobDataReaderDataWriterPermissions.ENV.sql is an environment file. We are in the LOCAL environment. This will run based on this check. Running LOCAL.GrantRobDataReaderDataWriterPermissions.ENV.sql on (local) - TestRoundhousE. TEST.GrantRobDataReaderDataWriterPermissions.ENV.sql is an environment file. We are in the LOCAL environment. This will NOT run based on this check. Skipped TEST.GrantRobDataReaderDataWriterPermissions.ENV.sql - No changes were found to run.
  • 22. RoundhousE отслеживает ситуации когда OneTime скрипт был обновлен