@sajtim

Как безболезненно изменить модель mysql в существующей бд?

Здравствуйте.
Двойной вопрос новичка самоучки по базам данных и сервису mysql
1. Допустим, изначально построенная модель более не соответствует общей задаче. Насколько безболезненно адаптировать уже имеющуюся базу данных, построенную по старой модели к новой модели?
2. Как, наверное, понятно, спрашивающий совершенно не имеет опыта взаимодействия с базами данных, и пытается поднять знания с нуля. Просьба предоставить прямолинейный алгоритм, по возможности самый краткий (три блатных аккорда) быстрого освоения, который впоследствии можно накачивать тонкостями.
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
Безболезненно - скорее всего никак. Поэтому сначала берем ТЗ, потом проектируем базу, а только потом начинаем что то кодить и создавать таблички.
Ну а если все таки возникает такая необходимость - смотрится в каждом конкретном случае. Сами понимаете, что если вам надо сделать alter table на табличке с парой десятков миллионов записей - это будет время и простой.. Поэтому еще раз - сначала думаем, а потом делаем.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@rPman
Я не уверен что хочет вопрошающий, вполне возможно просто какое то недопонимание.
Но если отвечать именно на заданный вопрос то если к примеру нужно обновить базу данных приложения без ее остановки (это в принципе актуально для хайлоад или просто больших данных), и при этом структуры данных заметно меняются, то есть следующие подходы:
Создаются новые таблицы, данные переливаются, добавляются тригеры (самый сложный момент, так как данные нужно перезаливать в обе стороны как из старых таблиц в новые так и наоборот), когда данные синхронизированы, старые таблицы заменяются на вьюхи (есть вообще такой подход, когда с таблицами напрямую не работают, а используют только представления или даже только хранимые процедуры), после того как старые приложения, работающие с базой, окончательно исчезнут, можно удалять старые вьюхи.

Лучше всего не допускать одновременную работу старого кода с базой и нового, т.е. предварительно необходимо разработать и обновить код приложений (или бакэнда если это веб) способного работать как со старой структурой базы так и с новой, чтобы атомарно и единовременно всю систему можно было бы перевести на новую версию. Обычно время, во время которого работают одновременно старые и новые приложения - это длительность сессии работы пользователя.

На практике никто особо не заморачивается, особенно в вебе. Запустил обновление базы, не нарушающее работу старого кода, затем обновил код, и после чистишь базу от старого кода. Даже если в этот момент система будет under maintaince какое то время, не беда...
Ответ написан
Комментировать
@mletov
по возможности самый краткий (три блатных аккорда) быстрого освоения

Нет никакого единого краткого алгоритма. Каждый случай индивидуален.

Но если совсем в целом, то:

1) Создать базу данных с новой структурой

2) Переписать клиентское приложение, чтобы оно работало с новой структурой базы (что там у вас: веб, десктоп, мобайл?).

3) Если база активно эксплуатировалась, то написать скрипт миграции данных из старой базы в новую.

4) Тщательно протестировать результат на локалке. Можно выкатить еще и на тестовый стенд, чтобы тестировщики и аналитики поигрались.

5) Выкатить новое приложение с новой базой на прод.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы