Недавно смотрел чего за последние годы сделано в области решений для миграций схем и данных в базах данных и как-то мне все решения не понравились. По крайней мере из open source ни одного проекта без косяков нюансов не нашёл.
Поэтому я решил порефлексировать и копнуть глубже — миграции баз данных всегда казались мне частным случаем общей проблемы обновления версий проекта.
Я предполагаю, что вы более-менее понимаете суть миграций в БД и сможете ориентироваться в моих допущениях: явных и неявных.
Первая часть эссе описывает миграции, пользу и проблемы от них. Вторая часть — мои пожелания к идеальной системе миграций.
Буду говорить в контексте программирования, но соображения можно распространить шире.
Когда мы описываем алгоритм: программу, доказательство теоремы или решение математической задачи — мы строим его описание в рамках некоторой формальной модели. В рамках соглашений и ограничений, которые мы явно или неявно принимаем.
Описать алгоритм вне формальной модели невозможно. Хотя бы потому, что любой язык — уже формализация.
Отсюда вытекает интересная проблема.
Расскажу об одной боли при разработке и проектировании ПО — преобразованиях данных между их схемами. Буду говорить о серверах, как наиболее наглядном и знакомом мне примере, но соображения можно распространить на весь софт.
Для демонстрационных целей местами может случиться некоторое преувеличение.
Рассмотрим простейший проект, этакий минимальный набор:
Данные, соответственно, ходят в обе стороны:
Сколько схем данных вы тут видите?
Подробно описывать ситуацию не буду — она много где уже разжёвана. Начать раскопки можно с хабра.
Само письмо: https://rms-support-letter.github.io/
Подробнее о письме на русском, с толикой теории заговора.
На arxiv.org выложен интересный препринт: Every Model Learned by Gradient Descent Is Approximately a Kernel Machine.
Как видно из названия, исследователи утверждают, что нейронные сети, обученные методом градиентного спуска (один из самых распространённых вариантов обучения) близки такой штуке как kernel machines — одной из техник машинного обучения «предыдущего поколения».
У kernel machines есть несколько интересных особенностей:
Из этого может неслучиться несколько интересных вещей.
Оба варианта выглядят довольно интересно.