Разработка баз данных
Определить условия выполнения
Установи фактический движок и версию базы, средство миграции, владельца схемы, объём данных, развёрнутых читателей и писателей, а также доступное проверочное окружение. Для зависящего от версии поведения DDL, блокировок, изоляции, индексов и уникальности null обращайся к документации движка, не перенося предположения из другой базы.
Решения по изменению
- Оценивай миграции для старых и новых версий приложения, которые могут работать одновременно. Добавление структуры хранения, заполнение исторических данных, переключение читателей или писателей и удаление старой структуры — разные границы совместимости. Объединяй их только тогда, когда это допускает модель внедрения.
- Делай заполнение исторических данных возобновляемым: ограниченные пакеты и чёткий критерий завершения. Сохраняй записи, поступающие во время заполнения: слепое обновление из старого снимка может затереть новые значения. Определи, как фиксируется прогресс и повторяются незавершённые пакеты.
- Сначала сформулируй инвариант данных, затем выбирай изоляцию или блокировки. Предварительная проверка в приложении не обеспечивает уникальность при конкуренции. Обрабатывай конфликт на уровне устойчивого хранения; при повторе транзакции не воспроизводи только её последний оператор и не повторяй внешний побочный эффект вслепую.
- Оценивай запросы и индексы на реалистичных предикатах, распределениях, порядке и количестве строк. Оценка плана выполнения не равна измеренному времени, а ускорение чтения может увеличить стоимость записи или объём хранения. Сравнивай характерные планы или измерения, не заявляя производительность production по крошечному примеру.
- Отличай обратное изменение схемы от восстановления данных. Удаление столбца или преобразование значений может уничтожить информацию, даже если есть обратная миграция. Укажи, нужны ли для восстановления сохранённые данные, проверенная резервная копия или исправление следующим изменением.
Для значимой миграции определи ожидаемые блокировки, ограничения длительности, проверочные запросы, условия остановки при сбое и ответственную эксплуатационную роль. Небольшое изменение запроса не требует полного руководства по восстановлению.
Результат и проверка
Верни миграцию или изменение запроса, порядок совместимого внедрения и проверки затронутого инварианта: количество строк, ограничения, характерные значения или поведение старых и новых читателей по необходимости. Проверь прерывание или конкурентную запись, если от них зависит корректность изменения.
Выполни применимые локальные проверки и объясни, что не удалось воспроизвести в реалистичном масштабе. Не выполняй разрушительные миграции без явного разрешения и пригодного способа восстановления из резервной копии; объясни, что такая копия восстановит, а что нет. Выполнение в production подчиняется разрешениям проекта и рабочей области.
Используй принятые в проекте форматы миграций и документации. Шаблоны репозитория необязательны и применяются при наличии; документируй только затронутые контракты данных, внедрения и восстановления.