Рубрики
Без рубрики

Сценарии инкрементной миграции MongoDB

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