JavaRush /Курси /Модуль 4: FastAPI /Що таке MongoDB: основна архітектура та можливості

Що таке MongoDB: основна архітектура та можливості

Модуль 4: FastAPI
Рівень 8 , Лекція 1
Відкрита

Сьогодні поглибимось в одну з найпоширеніших 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 підтримує різні види індексів:
    1. Одиночні (Single field) — індекс на одне поле.
    2. Складові (Compound) — індекс на кілька полів.
    3. Текстові — для пошуку по тексту (наприклад, 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!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ