На днях спросили у меня такую штуку и я написал страничку ответа. Потом подумал, дописал и вот готовый пост.
Рассказ нацелен на новичков. Его главная задача — сократить время растерянности и направить с правильными запросами в гугл и документацию баз. Советы, надеюсь, помогут быстро выбрать базу для хобби проекта или ненагруженного рабочего проекта.
Никакой полноты изложения. Никаких крайних случаев. Никакого хайлоада. Господа профи, поберегите, пожалуйста, пуканы :-D
Недавно смотрел чего за последние годы сделано в области решений для миграций схем и данных в базах данных и как-то мне все решения не понравились. По крайней мере из open source ни одного проекта без косяков нюансов не нашёл.
Поэтому я решил порефлексировать и копнуть глубже — миграции баз данных всегда казались мне частным случаем общей проблемы обновления версий проекта.
Я предполагаю, что вы более-менее понимаете суть миграций в БД и сможете ориентироваться в моих допущениях: явных и неявных.
Первая часть эссе описывает миграции, пользу и проблемы от них. Вторая часть — мои пожелания к идеальной системе миграций.
Расскажу об одной боли при разработке и проектировании ПО — преобразованиях данных между их схемами. Буду говорить о серверах, как наиболее наглядном и знакомом мне примере, но соображения можно распространить на весь софт.
Для демонстрационных целей местами может случиться некоторое преувеличение.
Рассмотрим простейший проект, этакий минимальный набор:
Данные, соответственно, ходят в обе стороны:
Сколько схем данных вы тут видите?
Как и собирался, полез разбираться с GraphQL.
Смотрел на него в контексте Python, поэтому возможны искажения — технология родилась, как и многое сейчас, в мире JavaScript — референсная реализация на этом языке сделана.
Покопался в OpenAPI и его интеграции с Python. Глубоко не лез — только чтобы закрыть собственные вопросы.
OpenAPI — спецификация API web-сервисов, выросшая из Swagger — описывает свойства API, чтобы по описанию генерировать документацию, клиентские и серверные библиотеки.
Swagger — проприетарная штука, OpenAPI — открытая. Поэтому сам Swagger я не смотрел — в наше время не стоит завязываться на такое, если у вас нет мешка с деньгами и вагона с юристами.
Также не смотрел интеграцию OpenAPI с другими языками. Где-то всё будет лучше, где-то — хуже. Думаю, лучше всего поддерживаться OpenAPI должно для JavaScript, так как фронтендерам оно больше всех пользы несёт.
Далее, тезисно, моё мнение.