Лабораторні
Як це влаштовано
Section titled “Як це влаштовано”Лабораторних дванадцять, і кожна йде за своїми модулями. Усі працюють на тому самому
датасеті «Крамниця», тож предметну область вчити заново не доводиться: ті самі покупці,
замовлення й товари, що в прикладах модулів. На сторінці кожної роботи сказано, які
модулі прочитати перед нею, а результат перевіряє скрипт check.sh.
Рівень означає глибину, а не порядок. Базова робота перевіряє, чи зрозуміло, як працює механізм. Середня вимагає застосувати його до задачі «Крамниці». Просунута вимагає виміряти результат, зламати щось навмисно й пояснити, що сталося.
Що потрібно
Section titled “Що потрібно”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 в архіві нижче.
Файли для роботи
Section titled “Файли для роботи”Лабораторні, docker-compose.yml, генератор датасету (розмір small готовий, інші генеруються) і завантажувачі
лежать одним архівом:
curl -fsSL https://database.easy-tech.blog/database-course-labs.tar.gz | tar xzcd database-course-labsdocker compose --profile postgres up -d --waitПрофіль postgres піднімає PostgreSQL 18 з датасетом розміру small. Роботам про
продуктивність (L2, L4, L11) потрібен medium, у десять разів більший: його генерують
локально за кілька секунд і завантажують окремо. Що в кожному розмірі, описано на сторінці Датасет.
./setup/generate-dataset.sh medium./setup/load-dataset.sh medium --resetЯк перевіряти себе
Section titled “Як перевіряти себе”Кожна робота має check.sh:
./labs/l01-sql-queries/check.shЧекер не змінює вашої бази shop: запити студента виконуються в режимі лише читання,
а роботи, де треба писати, перевіряються на окремій копії датасету. На кожну помилку він
каже, що саме не так: скільки рядків очікував і скільки отримав, які зайві й яких бракує,
яку умову порушено, і дає підказку про пастку. Якщо зламане саме середовище (контейнер
не запущено, датасету немає), чекер так і пише й не видає «усе гаразд».
Розв’язків в архіві немає. Чекери порівнюють з еталонними результатами, а не з еталонними запитами, тож прочитати відповідь із чекера не вийде.
Роботи
Section titled “Роботи”| Робота | Рівень | Спирається на | Середовище | |
|---|---|---|---|---|
| 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 варто зробити першою: на ній видно, як влаштовані завдання й чекер.