Перейти до вмісту

Лабораторні

Лабораторних дванадцять, і кожна йде за своїми модулями. Усі працюють на тому самому датасеті «Крамниця», тож предметну область вчити заново не доводиться: ті самі покупці, замовлення й товари, що в прикладах модулів. На сторінці кожної роботи сказано, які модулі прочитати перед нею, а результат перевіряє скрипт check.sh.

Рівень означає глибину, а не порядок. Базова робота перевіряє, чи зрозуміло, як працює механізм. Середня вимагає застосувати його до задачі «Крамниці». Просунута вимагає виміряти результат, зламати щось навмисно й пояснити, що сталося.

Docker з Compose і bash. На Windows це Docker Desktop з WSL2 і Git Bash або WSL, на macOS Docker Desktop, на Linux Docker Engine. Node.js чи Python на машині не потрібні: усе, що їх використовує, запускається в контейнерах із закріпленими версіями.

Пам’яті вистачить 8 ГБ, якщо віддати Docker 4 ГБ; комфортно 16 ГБ. Бази піднімаються профілями, і вмикати треба лише ту, з якою працюєте зараз: MongoDB, Scylla, Neo4j, ClickHouse й OpenSearch разом на ноутбук не вмістяться. Як поставити Docker, підняти профіль і що робити, якщо щось не стартує, описано в setup/README.md в архіві нижче.

Лабораторні, docker-compose.yml, генератор датасету (розмір small готовий, інші генеруються) і завантажувачі лежать одним архівом:

Terminal window
curl -fsSL https://database.easy-tech.blog/database-course-labs.tar.gz | tar xz
cd database-course-labs
docker compose --profile postgres up -d --wait

Профіль postgres піднімає PostgreSQL 18 з датасетом розміру small. Роботам про продуктивність (L2, L4, L11) потрібен medium, у десять разів більший: його генерують локально за кілька секунд і завантажують окремо. Що в кожному розмірі, описано на сторінці Датасет.

Terminal window
./setup/generate-dataset.sh medium
./setup/load-dataset.sh medium --reset

Кожна робота має check.sh:

Terminal window
./labs/l01-sql-queries/check.sh

Чекер не змінює вашої бази shop: запити студента виконуються в режимі лише читання, а роботи, де треба писати, перевіряються на окремій копії датасету. На кожну помилку він каже, що саме не так: скільки рядків очікував і скільки отримав, які зайві й яких бракує, яку умову порушено, і дає підказку про пастку. Якщо зламане саме середовище (контейнер не запущено, датасету немає), чекер так і пише й не видає «усе гаразд».

Розв’язків в архіві немає. Чекери порівнюють з еталонними результатами, а не з еталонними запитами, тож прочитати відповідь із чекера не вийде.

Робота Рівень Спирається на Середовище
L1 Запити до датасету базовий 3 postgres
L2 Схема і міграція без простою базовий 4, 5 postgres, medium
L3 Застосунок: N+1, ін’єкція, пул середній 6 postgres
L4 Прискорити повільні запити середній 8, 9 postgres, medium
L5 Аномалії ізоляції середній 10 postgres
L6 Відновлення на момент часу просунутий 11 власний compose
L7 Реплікація і перемикання просунутий 12 власний compose
L8 Кеш перед базою середній 14 postgres, redis
L9 Одна задача в трьох моделях просунутий 15, 16, 17 postgres, mongo, scylla
L10 Граф проти рекурсивного CTE середній 18 postgres, neo4j
L11 Аналітичний запит у трьох системах середній 19 postgres, clickhouse, medium
L12 Повнотекстовий і семантичний пошук просунутий 20 postgres зі словником

L6 і L7 піднімають власні середовища (архів WAL; мастер і репліка із затримкою мережі), бо кореневий docker-compose.yml для цього не налаштований. L12 додає до PostgreSQL український словник і, за бажанням, сервіс моделі ембедингів.

Роботи можна робити в будь-якому порядку після відповідних модулів, але L1 варто зробити першою: на ній видно, як влаштовані завдання й чекер.