Рубрики
Uncategorized

Как обрабатывать версии базы данных в нескольких средах

Хорошо, так вот ситуация: вы работаете в команде, и каждый разработчик работает с местной средой …. Tagged с базой данных, кодовой коробкой, Agile, Devops.

Хорошо, так вот ситуация: вы работаете в команде, и каждый разработчик работает с местной средой. Или у вас есть несколько сред. Или… Нам все равно. Единственное, что вы должны обрабатывать разные версии баз данных, и вы не знаете, как это сделать безопасно и эффективно.

Разные версии базы данных могут отличаться с точки зрения данные или с точки зрения состав . В этой статье мы сосредоточимся на управлении различными версиями базы данных с различными структурами, используя словарный запас реляционного базы данных с MySQL Примеры. Тем не менее, это решение может работать для любой базы данных, например, noSQL.

Потенциальное решение

Здесь мы предполагаем, что вы работаете в команде, и у вас есть инструмент, чтобы поделиться кодом между людьми (например, Git, SVN).

Давайте создадим скрипт в проекте, где вы положите всю эволюцию базы данных. Это может быть сценарий SQL, код в любом языке программирования, который вы подключаетесь к базе данных или другое решение. Это не важно, единственное, что вы можете выполнить запросы в базе данных. Когда разработчик хочет изменить структуру базы данных, он напишет блок кода (один или несколько запросов) в конце этого файла и поделитесь файлом с другими людьми. Важно сохранить этот файл в курсе и регулярно проводить его на всю среду.

На данный момент, если вы выполните файл несколько раз, вы, безусловно, столкнулись с некоторыми ошибками. Это проблематично, потому что вам нужно запустить этот файл каждый раз, когда он обновляется. Таким образом, вы должны добавить условие на каждом блоке и хранить в базе данных, какой блок уже выполнен. Для этого, YO может создать таблицу в вашей базе данных, чтобы сохранить каждую эволюцию с уникальным идентификатором. Наконец, вы запустите блок только в том случае, если идентификатор еще не хранится на этой таблице.

Это все. В следующем примере обеспечивается иллюстрация процесса.

Пример

Этот пример основан на проекте разработки, который использует базу данных MySQL для хранения некоторых данных приложений. Есть два разработчика, которые развиваются в локальной среде на своем ноутбуке (SO 2 в средах развития), и есть одна производственная среда. Для каждой среды есть одна база данных. Базы данных уже существуют, но мы хотим быть уверены, что у нас есть ту же версия (та же структура) базы данных на каждой среде.

Как правило, в проекте база данных развивается с кодом проекта. Поэтому, если вы обновите базу данных, вы должны обновить код и наоборот.

Во-первых, давайте создадим таблицу для хранения эволюции. Мы должны выполнить этот запрос на все базы данных:

CREATE TABLE db_evol(
    id_evol VARCHAR(10) PRIMARY KEY NOT NULL
);

Теперь давайте создадим файл db_evol.sql В проекте, с нашей первой эволюцией. Здесь мы используем процедуру MySQL, но мы могли бы использовать других.

delimiter //
-- evol1
create procedure evol() 
begin
    set @id_evol := "evol1";
    SET @count:= (select COUNT(*) FROM db_evol WHERE id_evol= @id_evol);
    if @count = 0 then
        -- This 2 lines correspond to the DB evolution
        ALTER TABLE table1 ADD new_col VARCHAR(255);
        UPDATE table1 set new_col = 'default value';
        INSERT INTO db_evol(id_evol) VALUES(@id_evol);
        SELECT CONCAT(@id_evol, " executed");
    else
        SELECT CONCAT(@id_evol, " skipped");
    end if;
end//
call evol()//
drop procedure evol//

Следующий шаг — второй разработчик, который хочет обновить базу данных. Во-первых, я проверю, если файл db_evol.sql до даты. Если есть изменения, я запускаю файл. После этого я напишу вторую эволюцию в конце файла и проверить сценарий. Если все в порядке, я буду обновлять файл проекта.

После нескольких эволюций все разработчики соглашаются обновить производственную среду. Таким образом, они будут обновлять код и запустить скрипт db_evol.sql на производство.

Заключение

В этой статье представлен обзор, как обрабатывать версии базы данных в нескольких средах. Как мы видели, существует не только одно решение: вы столкнетесь с разными случаями. Чтобы вернуться к начальному состоянию в случае ошибок, мы рекомендуем добавить транзакцию или обработку ошибок в вашем скрипте.

Оригинал: «https://dev.to/4sushi/how-to-handle-database-versions-on-multiple-environments-f93»