2008-09-25 3 views
81

Я использую как рубины на рельсах, так и Java. Мне очень нравится использовать миграцию, когда я работаю над проектом rails. поэтому мне интересно, есть ли такие миграции, как инструмент для Java? Если такого инструмента нет, рекомендуется использовать миграцию в качестве инструмента для управления базой данных, используемой Java-проектом?Миграции для Java

ответ

7

Я использовал программу SchemaUpdate Hibernate для выполнения той же функции, что и миграции. На самом деле это проще, чем миграции, потому что каждый раз, когда вы запускаете свое приложение, он анализирует структуру базы данных и синхронизирует ее с вашими сопоставлениями, поэтому нет лишнего рейка: db: шаг переноса, и ваше приложение никогда не может быть не синхронизировано с базой данных, в которой он запущен против. Файлы сопоставления Hibernate не сложнее, чем миграции Rails, поэтому, даже если вы не использовали Hibernate в приложении, вы можете воспользоваться им. Недостатком является то, что он не такой гибкий, как откат, миграция вниз, запуск операторов DML. Как отмечается в комментариях, он также не отбрасывает таблицы или столбцы. Я запускаю отдельный метод для выполнения этих операций вручную в процессе инициализации Hibernate.

Я не понимаю, почему вы не могли использовать миграции Rails, хотя, если вы не возражаете против установки стека (Ruby, Rake, Rails), вам не придется прикасаться к вашему приложению.

+18

Он не синхронизирует его на 100%. Он не изменяет столбцы, не удаляет столбцы или таблицы, не удаляет FK и т. Д. – cherouvim

10

Grails имеет служебную программу dbmigrate, которая укладывается по шаблону после одной из Rails. Поскольку он реализован в Groovy, вы сможете использовать его из любого из ваших проектов Java.

7

Есть также две независимые реализации рельсам-подобных миграций для Java:

1) Maven на основе миграции из Carbon Five

2) Ant на основе задач из Hashrocket (мой личный фаворит)

Хотя эти пакеты были написаны специально для Maven и Ant, с некоторыми работами вы можете адаптировать их практически ко всему.

+2

Hashrocket не был затронут с 2007 года. Продукт C5-db-миграции Carbon Five не обновлялся с 2010 года. – Green

12

Liquibase - еще один проект в этой области, который стоит проверить.

4

Migrate4j кажется кандидатом, но проект не выглядит достаточно зрелым для использования в производстве.

6

Я столкнулся с этим сообщением, исследуя тот же вопрос. Я еще не пришел к выводам о лучшем инструменте или подходе, но один инструмент, с которым я столкнулся, который еще не упоминался в других ответах, - dbdeploy. Мне было бы интересно прочитать любые сравнения этих инструментов.

Другие релевантные ресурсы: Martin Fowler и Pramod Sadalage в возрасте от Evolutionary Database Design, а также книга Refactoring Databases: Evolutionary Database Design от Sadalage и Scot Ambler.

86

Для сравнения особенность между

  • пролетного пути
  • LiquiBase
  • с5-DB-миграция
  • dbdeploy
  • mybatis
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • автопатча

посмотреть на http://flywaydb.org

Это должно быть хорошим началом для вас и кто-то еще, чтобы выбрать правильный инструмент для работы

+1

Эй, я не знал пролетного пути. Это выглядит довольно интересно, и я буду более внимательно смотреть на него. Спасибо, что упомянул Flyway! –

+0

@Pascal Thivent Спасибо за ваш комментарий! Если вы оцениваете это, я был бы рад услышать ваше мнение/критику/предложения об этом, либо здесь, либо в треке Трекера Flyway :-) Я также рассмотрю добавление DbMaintain в матрицу сравнения, поскольку он выглядит как отличный конкурент ... –

+0

Конечно, сделаю. И спасибо за добавление DbMaintain к сравнению, очень приятно иметь такую ​​матрицу. –

2

Существует также DbMaintain, который был изначально разработан внутри Unitils, но теперь является выделенным проектом. В настоящее время мы используем его и очень довольны (это не означает, что нет хороших альтернатив). Я перечисляю их в моих записях database+migration (с акцентом на инструменты, поддерживающие Maven).

+0

Инструменты, подобные этому, помогут нам быстрее развиваться и безопасно –

+0

@Arthur Да, очень хорошо, что у нас есть и такие инструменты. Каскадные обновления схемы из одной среды в другую теперь для нас приятно :) –