Автор оригинала: 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