manage.py migrate в пятницу в 17:30 на проде с 3K RPS и таблицей 200М строк
Всем привет! Меня зовут Макс, я Lead Backend и автор YouTube-канала PyLounge . Это третья часть мини-серии о Django-миграциях. В первой части мы готовились к миграциям и разбирались с конфликтами, во второй чинили типичные подводные камни. Если их не читали, то рекомендую начать именно с них, а затем вернуться сюда. В этом же материале поговорим о самом интересном: что происходит, когда python manage.py migrate запускается в 17:30 в пятницу на проде, под 3k RPS и таблицей в 200 миллионов строк. Расскажу какие блокировки в PostgreSQL берёт каждая операция Django, что внутри atomic = False , как пишется правильный паттерн expand-migrate-contract , зачемнужны AddIndexConcurrently , AddConstraintNotValid , SeparateDatabaseAndState и как обновлять данные на больших таблицах. P.S. примеры намеренно упрощены, чтобы влезли в статью и не задушили. В реальной жизни всё ещё хуже - но шаги те же. P.S.S. При подготовки этого материала ни одна продовая база данных не пострадала.
https://habr.com/ru/articles/1035830/
#python #django #pylounge #базы_данных #миграции_django #миграции #postgresql #программирование