Автор оригинала: Vlad Mihalcea.
Процесс инкрементной разработки программного обеспечения требует стратегии инкрементной миграции базы данных.
Я помню, как работал над корпоративным приложением, в котором hibernate.hbm2ddl.auto был инструментом переноса данных по умолчанию.
Обновление производственной среды требовало интенсивной подготовки, и сценарии миграции создавались только на месте. Непредвиденная ошибка могла привести к повреждению производственных данных.
Инкрементное обновление базы данных-это техническая функция, которую необходимо решить на самых первых итерациях разработки приложений.
Мы использовали для разработки собственных реализаций миграции пользовательских данных, и затраты времени на написание/поддержку фреймворков всегда идут вразрез с вашим текущим бюджетом проекта.
Проект должен быть упакован как с кодом приложения, так и со всеми связанными сценариями обновления схемы базы данных/данных. Использование сценариев инкрементной миграции позволяет нам автоматизировать процесс развертывания и воспользоваться преимуществами непрерывной доставки .
В настоящее время вам не нужно внедрять инструменты переноса данных, Nowadays you don’t have to implement data migration tools, Flyway does a better job than all our previous custom frameworks. All database schema and data changes have to be recorded in incremental update scripts following a well-defined naming convention . Flyway
В плане миграции СУБД рассматриваются как изменения схемы, так и изменения данных. Всегда полезно разделять изменения схемы и данных. Интеграционные тесты могут использовать сценарии переноса схемы только в сочетании с данными, связанными со временем тестирования.
Flyway поддерживает все основные системы реляционных баз данных, но для NoSQL (например, MongoDB) вам нужно искать в другом месте.
Mongeez -это проект с открытым исходным кодом, направленный на автоматизацию миграции данных MongoDB. MongoDB не имеет схемы, поэтому сценарии миграции предназначены только для обновления данных.
Интеграция обезьян
Сначала вам нужно определить файл конфигурации mongeez:
Сначала вам нужно определить файл конфигурации mongeez:
Затем вы добавляете фактические сценарии переноса:
Затем вы добавляете фактические сценарии переноса:
//mongeez formatted javascript //changeset system:v1_1 db.product.insert({ "_id": 1, "name" : "TV", "price" : 199.99, "currency" : 'USD', "quantity" : 5, "version" : 1 }); db.product.insert({ "_id": 2, "name" : "Radio", "price" : 29.99, "currency" : 'USD', "quantity" : 3, "version" : 1 });
Затем вы добавляете фактические сценарии переноса:
//mongeez formatted javascript //changeset system:v1_2 db.product.update( { name : 'TV' }, { $inc : { price : -10, version : 1 } }, { multi: true } );
И вам тоже нужно добавить MongeezRunner:
Бегущая обезьяна
При первом запуске приложения инкрементные сценарии будут проанализированы и запущены только в случае необходимости:
INFO [main]: o.m.r.FilesetXMLReader - Num of changefiles 2 INFO [main]: o.m.ChangeSetExecutor - ChangeSet v1_1 has been executed INFO [main]: o.m.ChangeSetExecutor - ChangeSet v1_2 has been executed
Mongeez использует отдельную коллекцию MongoDB для записи ранее выполненных сценариев:
db.mongeez.find().pretty(); { "_id" : ObjectId("543b69eeaac7e436b2ce142d"), "type" : "configuration", "supportResourcePath" : true } { "_id" : ObjectId("543b69efaac7e436b2ce142e"), "type" : "changeSetExecution", "file" : "v1_1__initial_data.js", "changeId" : "v1_1", "author" : "system", "resourcePath" : "mongodb/migration/v1_1__initial_data.js", "date" : "2014-10-13T08:58:07+03:00" } { "_id" : ObjectId("543b69efaac7e436b2ce142f"), "type" : "changeSetExecution", "file" : "v1_2__update_products.js", "changeId" : "v1_2", "author" : "system", "resourcePath" : "mongodb/migration/v1_2__update_products.js", "date" : "2014-10-13T08:58:07+03:00" }
Для автоматизации процесса развертывания вам необходимо создать самодостаточные пакеты, содержащие как байт-код, так и всю связанную конфигурацию (XML-файлы, пакеты ресурсов и сценарии переноса данных). Прежде чем приступить к написанию собственной пользовательской платформы, вам всегда следует изучить доступные альтернативы с открытым исходным кодом.
Код доступен на GitHub Code available on GitHub