← Все практикумы

06 · Конкурентность

Конкурентные операции в PostgreSQL

Заказчик
«Улей», сервис бронирования коворкинга
Вы делаете
сервис, с базой которого одновременно работают несколько сессий

Защищаете правила сервиса, когда с одной базой PostgreSQL одновременно работают несколько сессий: выбираете механизм, называете его цену и подтверждаете выбор воспроизводимым чередованием.

Маршрут

5 заданий

Время

14–19 ч

Бесплатно

первые 2

около 6 ч работы с проверкой и рецензией

Уровень: от middle до senior. Нужно уметь: писать сервисы на Python с SQL, понимать транзакцию и ограничения, запускать PostgreSQL в Docker и тесты pytest

Начать бесплатно · Python

Чему научитесь

  • Сохранять обновления при одновременных сессиях
  • Повторять транзакцию правильно и ставить эффект после фиксации
  • Ограничивать ожидание блокировок и упорядочивать захват

Что будет к концу практикума

Сервис коворкинга в вашем Git-репозитории: операции, которые выдерживают объявленные чередования сессий, миграции и записанные решения с ценой выбранного механизма.

Задания по порядку

Задания развивают один Git-репозиторий: следующее приходит через softpractice update поверх вашего принятого решения. Отдельный проект получает только задание с пометкой «новый проект». Код вы пишете локально, в своём редакторе. Под названием каждого задания — навык, который оно тренирует.

Задания 1–2 — бесплатно

Без подписки: каждое решение проходит тесты и получает рецензию по вашему коду.

  1. 1Списание без потерянного обновленияСохранять обновление счётчика в PostgreSQL при одновременных сессиях и называть цену выбранного механизма: кто ждёт, а кто получает отказ.2,5 ч
  2. 2Дежурный у стойки при одновременных снятияхЗащищать в PostgreSQL правило, которое читает несколько строк, когда одновременные сессии меняют разные строки, и объяснять, почему механизмы одной строки здесь не помогают.3,5 ч

Дальше — по подписке

Подписка открывает остальные задания и весь каталог практикумов.

  1. 3Перенос брони при отказах базыПовторять в PostgreSQL всю транзакцию после ошибки сериализации или взаимоблокировки, не повторяя бизнес-отказы и не отправляя внешний эффект дважды.3,5 ч
  2. 4Очередь напоминаний без двойной обработкиРаздавать задания из таблицы PostgreSQL нескольким обработчикам арендой со сроком: без двойной обработки, с возвратом зависшего задания и честным повтором после истечения аренды.3,5 ч
  3. 5Ожидание и время удержанияОграничивать ожидание чужих блокировок честным ответом «занято», дробить долгую операцию на короткие идемпотентные шаги и захватывать строки в одном порядке, не теряя инвариантов.3,5 ч

Начните с первых 2 заданий бесплатно

Зарегистрируйтесь, установите CLI и скачайте starter-проект. Если формат подойдёт, подписка откроет продолжение.

Начать бесплатно · Python