SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
Версионирование структуры
реляционных баз данных
А что такое версионирование?
Версионирование - процесс сопоставления
состояния ПО уникальному номеру или
имени версии.
Зачем такие сложности?
Все это не нужно, если ваш проект выглядит
так:
Об этом стоит задуматься
Когда проект и команда начинают расти
Как можно решить задачу
1. Выбрать язык/фреймворк в котором это
   есть из коробки(Ruby/rake, PHP/YII,
   PHP/Doctrine, Python/Yoyo,
   Python/Sqlalchemy, etc)
2. Использовать stand-alone решение
3. Написать свою утилиту для
   версионирования
4. Не делать ничего...
Подходы к решению
Метод инкрементных изменений

Недостатки:
1. Сложности при командной разработке
Подходы к решению
Метод идемпотентных изменений

Недостатки:
1. Сложность написания скриптов
2. Опасность повторного применения
   изменений при повторении имен
Подходы к решению
Метод декларативного описания структуры
БД

Недостатки:
1. Сложность миграции данных
2. Сложно выполнять вручную
3. Готовые решение платные
Какие есть stand-alone решения
1. DbDeploy
2. Liquibase
3. Flyway
4. AutoPatch
5. DbMaintain
... тысячи их
DbDeploy возможности
1. Миграции на чистом SQL
2. Command Line интерфейс
3. Поддержка большинства СУБД
4. Поддержка в Phing/Ant
--//
-- Run SQL to do the changes
--//@UNDO
-- RUN SQL to undo the changes
--//
Liquibase возможности
1.   XML и Groovy миграции
2.   Поддержка большинства СУБД
3.   Поддержка в Ant/Maven/Phing
4.   Command Line интерфейс
 <changeSet id="1" author="bob">
   <createTable tableName="department">
      <column name="id" type="int">
        <constraints primaryKey="true" nullable="false"/>
      </column>
      <column name="name" type="varchar(50)">
        <constraints nullable="false"/>
      </column>
      <column name="active" type="boolean" defaultValueBoolean="true"/>
   </createTable>
 </changeSet>
Flyway возможности
1. Java и SQL миграции
2. Поддержка большинства СУБД
3. Поддержка в Ant/Maven
4. Command Line интерфейс
5. Плейсхолдеры в миграциях
/* Single line comment */
CREATE TABLE test_user (
  name VARCHAR(25) NOT NULL,
  PRIMARY KEY(name)
);
Литература
1.   http://habrahabr.ru/post/121265/
2.   http://flywaydb.org/
3.   http://www.liquibase.org/
4.   http://www.phing.info/
Спасибо за внимание
Вопросы?

Contenu connexe

Tendances

Равиль Губайдуллин - Annotation processing
Равиль Губайдуллин - Annotation processingРавиль Губайдуллин - Annotation processing
Равиль Губайдуллин - Annotation processingProvectus
 
Система документации phpDocumentor
Система документации phpDocumentorСистема документации phpDocumentor
Система документации phpDocumentorroadhump
 
Илья Кацев: Анализ данных для поиска ошибок
Илья Кацев: Анализ данных для поиска ошибокИлья Кацев: Анализ данных для поиска ошибок
Илья Кацев: Анализ данных для поиска ошибокYandex
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод7bits
 
SharePoint и OpenXML
SharePoint и OpenXMLSharePoint и OpenXML
SharePoint и OpenXMLVitaly Baum
 
Разработка веб-приложений с помощью TypeScript
Разработка веб-приложений с помощью TypeScriptРазработка веб-приложений с помощью TypeScript
Разработка веб-приложений с помощью TypeScriptStas Vyschepan
 

Tendances (9)

Равиль Губайдуллин - Annotation processing
Равиль Губайдуллин - Annotation processingРавиль Губайдуллин - Annotation processing
Равиль Губайдуллин - Annotation processing
 
Fullstack javascript. Isomorphic apps
Fullstack javascript. Isomorphic appsFullstack javascript. Isomorphic apps
Fullstack javascript. Isomorphic apps
 
Система документации phpDocumentor
Система документации phpDocumentorСистема документации phpDocumentor
Система документации phpDocumentor
 
Илья Кацев: Анализ данных для поиска ошибок
Илья Кацев: Анализ данных для поиска ошибокИлья Кацев: Анализ данных для поиска ошибок
Илья Кацев: Анализ данных для поиска ошибок
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
 
SharePoint и OpenXML
SharePoint и OpenXMLSharePoint и OpenXML
SharePoint и OpenXML
 
Разработка веб-приложений с помощью TypeScript
Разработка веб-приложений с помощью TypeScriptРазработка веб-приложений с помощью TypeScript
Разработка веб-приложений с помощью TypeScript
 
Browerify
Browerify Browerify
Browerify
 
Bootstrap
BootstrapBootstrap
Bootstrap
 

Similaire à Relational databases versioning

Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
азы мультисайтинга
азы мультисайтингаазы мультисайтинга
азы мультисайтингаInna Tuyeva
 
продвинутый мультисайтинг
продвинутый мультисайтингпродвинутый мультисайтинг
продвинутый мультисайтингInna Tuyeva
 
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияOvadiah Myrgorod
 
Ігор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerІгор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerLEDC 2016
 
Console application with ZF 2.0
Console application with ZF 2.0Console application with ZF 2.0
Console application with ZF 2.0Alexey Kachayev
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPmikhailshurgulaya
 
Multilanguage Drupal
Multilanguage DrupalMultilanguage Drupal
Multilanguage DrupalInna Tuyeva
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-AccessSerghei Urban
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1Technopark
 

Similaire à Relational databases versioning (20)

Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
азы мультисайтинга
азы мультисайтингаазы мультисайтинга
азы мультисайтинга
 
продвинутый мультисайтинг
продвинутый мультисайтингпродвинутый мультисайтинг
продвинутый мультисайтинг
 
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровождения
 
Ігор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerІгор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developer
 
Console application with ZF 2.0
Console application with ZF 2.0Console application with ZF 2.0
Console application with ZF 2.0
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 
Multilanguage Drupal
Multilanguage DrupalMultilanguage Drupal
Multilanguage Drupal
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)
 
Invisible
InvisibleInvisible
Invisible
 
Step 1
Step 1Step 1
Step 1
 
Symfony 3
Symfony 3Symfony 3
Symfony 3
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1
 

Relational databases versioning

  • 2. А что такое версионирование? Версионирование - процесс сопоставления состояния ПО уникальному номеру или имени версии.
  • 3. Зачем такие сложности? Все это не нужно, если ваш проект выглядит так:
  • 4. Об этом стоит задуматься Когда проект и команда начинают расти
  • 5. Как можно решить задачу 1. Выбрать язык/фреймворк в котором это есть из коробки(Ruby/rake, PHP/YII, PHP/Doctrine, Python/Yoyo, Python/Sqlalchemy, etc) 2. Использовать stand-alone решение 3. Написать свою утилиту для версионирования 4. Не делать ничего...
  • 6. Подходы к решению Метод инкрементных изменений Недостатки: 1. Сложности при командной разработке
  • 7. Подходы к решению Метод идемпотентных изменений Недостатки: 1. Сложность написания скриптов 2. Опасность повторного применения изменений при повторении имен
  • 8. Подходы к решению Метод декларативного описания структуры БД Недостатки: 1. Сложность миграции данных 2. Сложно выполнять вручную 3. Готовые решение платные
  • 9. Какие есть stand-alone решения 1. DbDeploy 2. Liquibase 3. Flyway 4. AutoPatch 5. DbMaintain ... тысячи их
  • 10. DbDeploy возможности 1. Миграции на чистом SQL 2. Command Line интерфейс 3. Поддержка большинства СУБД 4. Поддержка в Phing/Ant --// -- Run SQL to do the changes --//@UNDO -- RUN SQL to undo the changes --//
  • 11. Liquibase возможности 1. XML и Groovy миграции 2. Поддержка большинства СУБД 3. Поддержка в Ant/Maven/Phing 4. Command Line интерфейс <changeSet id="1" author="bob"> <createTable tableName="department"> <column name="id" type="int"> <constraints primaryKey="true" nullable="false"/> </column> <column name="name" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="active" type="boolean" defaultValueBoolean="true"/> </createTable> </changeSet>
  • 12. Flyway возможности 1. Java и SQL миграции 2. Поддержка большинства СУБД 3. Поддержка в Ant/Maven 4. Command Line интерфейс 5. Плейсхолдеры в миграциях /* Single line comment */ CREATE TABLE test_user ( name VARCHAR(25) NOT NULL, PRIMARY KEY(name) );
  • 13. Литература 1. http://habrahabr.ru/post/121265/ 2. http://flywaydb.org/ 3. http://www.liquibase.org/ 4. http://www.phing.info/