06 · Конкурентность
Конкурентные операции в PostgreSQL
- Заказчик
- «Улей», сервис бронирования коворкинга
- Вы делаете
- сервис, с базой которого одновременно работают несколько сессий
Защищаете правила сервиса, когда с одной базой PostgreSQL одновременно работают несколько сессий: выбираете механизм, называете его цену и подтверждаете выбор воспроизводимым чередованием.
Маршрут
5 заданий
Время
14–19 ч
Бесплатно
первые 2
около 6 ч работы с проверкой и рецензией
Уровень: от middle до senior. Нужно уметь: писать сервисы на Python с SQL, понимать транзакцию и ограничения, запускать PostgreSQL в Docker и тесты pytest
Начать бесплатно · PythonЧему научитесь
- Сохранять обновления при одновременных сессиях
- Повторять транзакцию правильно и ставить эффект после фиксации
- Ограничивать ожидание блокировок и упорядочивать захват
Что будет к концу практикума
Сервис коворкинга в вашем Git-репозитории: операции, которые выдерживают объявленные чередования сессий, миграции и записанные решения с ценой выбранного механизма.
Задания по порядку
Задания развивают один Git-репозиторий: следующее приходит через softpractice update поверх вашего принятого решения. Отдельный проект получает только задание с пометкой «новый проект». Код вы пишете локально, в своём редакторе. Под названием каждого задания — навык, который оно тренирует.
Задания 1–2 — бесплатно
Без подписки: каждое решение проходит тесты и получает рецензию по вашему коду.
- 1Списание без потерянного обновленияСохранять обновление счётчика в PostgreSQL при одновременных сессиях и называть цену выбранного механизма: кто ждёт, а кто получает отказ.2,5 ч
- 2Дежурный у стойки при одновременных снятияхЗащищать в PostgreSQL правило, которое читает несколько строк, когда одновременные сессии меняют разные строки, и объяснять, почему механизмы одной строки здесь не помогают.3,5 ч
Дальше — по подписке
Подписка открывает остальные задания и весь каталог практикумов.
- 3Перенос брони при отказах базыПовторять в PostgreSQL всю транзакцию после ошибки сериализации или взаимоблокировки, не повторяя бизнес-отказы и не отправляя внешний эффект дважды.3,5 ч
- 4Очередь напоминаний без двойной обработкиРаздавать задания из таблицы PostgreSQL нескольким обработчикам арендой со сроком: без двойной обработки, с возвратом зависшего задания и честным повтором после истечения аренды.3,5 ч
- 5Ожидание и время удержанияОграничивать ожидание чужих блокировок честным ответом «занято», дробить долгую операцию на короткие идемпотентные шаги и захватывать строки в одном порядке, не теряя инвариантов.3,5 ч
Начните с первых 2 заданий бесплатно
Зарегистрируйтесь, установите CLI и скачайте starter-проект. Если формат подойдёт, подписка откроет продолжение.
Начать бесплатно · Python