Сьогодні поглибимось в одну з найпоширеніших NoSQL баз даних — MongoDB. Якщо уявити бази даних у термінах автомобілів, то MongoDB — це спортивна машинка, яка розганяється до сотні за лічені секунди і класно підходить для шустрих маневрів. Тільки не чекай від неї економічності й комфорту як від сімейного мінівена на довгі дистанції.
MongoDB — це документоорієнтована база даних, яка зберігає дані у форматі JSON-подібних документів. Однак замість JSON використовується формат BSON (Binary JSON), який підтримує більше типів даних і важить менше.
У світі MongoDB у нас є:
- База даних (Database) — це як шафа, де ти зберігаєш різні колекції.
- Колекція (Collection) — полиця в шафі, куди складаєш документи.
- Документ (Document) — те, що кладеш на полицю. Він представлений у форматі BSON, де дані виглядають як JSON-об'єкти.
Ось приклад:
{
"_id": "647823fa49f5e3",
"name": "Іван Іванов",
"email": "ivan.ivanov@example.com",
"is_active": true,
"roles": ["admin", "user"]
}
Зверни увагу на поле _id. Це унікальний ідентифікатор документа, який генерується MongoDB автоматично, якщо ти його сам не вкажеш. Зручно, правда?
Коротко пробіжимося по основним компонентам MongoDB:
- Mongod: головний процес MongoDB, що відповідає за виконання CRUD операцій, управління даними і обробку запитів.
- Mongo Shell: інтерактивний інтерфейс командного рядка для спілкування з твоїм MongoDB сервером.
- Replica Set: набір серверів MongoDB, що працюють разом для забезпечення відмовостійкості.
- Sharding: технологія для горизонтального масштабування бази даних (розбиття даних на сегменти).
Можливості MongoDB
MongoDB — це не просто база даних, це ціла екосистема! Давай розглянемо ключові можливості, які роблять її такою популярною.
- Горизонтальне масштабування.
На відміну від реляційних СУБД, MongoDB спочатку проєктувалася для горизонтального масштабування. Вона використовує шардування, щоб розбивати твої дані на частини і розподіляти їх по різних серверах. Це особливо корисно, якщо працюєш з великими об'ємами даних (наприклад, аналітика, big data).
Приклад: якщо у тебе величезна база з мільйонами користувачів, її можна "порізати" на кілька серверів, і запити обслуговуватимуться паралельно. - Реплікація.
MongoDB підтримує реплікацію даних за допомогою Replica Sets. Це набір серверів, де один сервер є primary, а інші — secondary. Primary приймає операції запису, а secondary забезпечують резервне копіювання.
Сценарій: якщо головний сервер "впаде", MongoDB автоматично обере нового primary з-поміж наявних secondary. Гарний спосіб забезпечити відмовостійкість. - Індексація.
Індексація в MongoDB працює приблизно як покажчики в книзі: вона пришвидшує пошук даних. MongoDB підтримує різні види індексів:- Одиночні (Single field) — індекс на одне поле.
- Складові (Compound) — індекс на кілька полів.
- Текстові — для пошуку по тексту (наприклад,
full-text search).
Приклад створення індексу:
Індекси критично важливі для продуктивності запитів.db.users.create_index("name") - Агрегації.
MongoDB дає потужний pipeline механізм для обробки та аналізу даних. Можеш виконувати фільтрацію, групування, підрахунок і багато іншого.
Приклад агрегації: порахувати, скільки користувачів з роллю "admin" у колекціїusers:db.users.aggregate([ {"$match": {"roles": "admin"}}, {"$group": {"_id": None, "count": {"$sum": 1}}} ]) - Транзакції.
З версії 4.0 MongoDB підтримує багатодокументні транзакції, забезпечуючи ACID-властивості. Звісно, це не на рівні деяких SQL-баз, але все ж.
Приклад використання транзакцій:
Це корисно, якщо потрібно зберегти узгоджений стан між кількома колекціями.with client.start_session() as session: with session.start_transaction(): users.update_one({"_id": user_id}, {"$set": {"is_active": True}}) logs.insert_one({"event": "user_activated", "user_id": user_id})
Використання MongoDB
Незважаючи на свої особливості, MongoDB активно використовується в реальних проектах. Ось кілька прикладів, де вона особливо добре себе проявляє:
Проєкти з динамічною структурою даних.
MongoDB ідеально підходить для застосунків, де структура даних може змінюватися з часом. Наприклад: системи управління контентом (CMS), соціальні мережі, аналітичні застосунки.
Приклад: сьогодні в користувача є два поля (ім'я і email), а завтра ти вирішив додати поле "адреса" — це не стане проблемою. У MongoDB кожен запис може мати свою унікальну структуру.
Високонавантажені системи.
Завдяки масштабованості і підтримці реплікації MongoDB чудово підходить для проєктів з великою навантаженістю: e-commerce, застосунки доставки, трекінг логістики тощо.
Факт: компанії, такі як Uber і Netflix, використовують MongoDB за її здатність зберігати великі дані і обробляти їх швидко.
Геопросторові дані.
MongoDB підтримує геопросторові індекси, які дозволяють виконувати запити по географічним даним (наприклад, пошук найближчих об'єктів).
Приклад запиту: знайти найближчі ресторани до вказаної точки:
{
"location": {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [50.45, 30.52]
}
}
}
}
MongoDB надає широкий набір інструментів, які роблять роботу з нею ще зручнішою:
- MongoDB Atlas — хмарний сервіс MongoDB.
- Mongo Compass — графічний інтерфейс для управління даними.
- Mongoose — ODM-бібліотека для роботи з MongoDB в застосунках на Node.js.
- Motor — асинхронна бібліотека для Python, яку ми будемо використовувати в наступних лекціях.
MongoDB — це гнучке й потужне рішення для роботи з великими даними в сучасних веб-застосунках. Але, як і з будь-яким інструментом, важливо розуміти її сильні та слабкі сторони, щоб використовувати її ефективно. У наступній лекції перейдемо до практики: встановимо MongoDB і налаштуємо її для роботи з FastAPI!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ