Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как устроена MongoDB
MongoDB — это NoSQL документоориентированная база данных. Вот основная архитектура:
Иерархия структуры
MongoDB Server
└── Database
└── Collection
└── Document (JSON-like)
Database — логический контейнер. На одном сервере несколько БД. Collection — аналог таблицы в SQL. Хранит документы. Document — JSON-like объект (BSON). Это основная единица хранения.
Документ (BSON)
Kаждый документ — это иерархическая структура:
{
"_id": ObjectId("507f1f77bcf86cd799439011"),
"name": "John",
"email": "john@example.com",
"age": 30,
"active": true,
"tags": ["python", "mongodb"],
"profile": {
"bio": "Developer",
"verified": true
}
}
_id— уникальный идентификатор (ObjectId по умолчанию)- Данные хранятся в BSON (Binary JSON)
- Каждый документ может иметь разную структуру (schema-less)
- Поддерживает вложенные объекты и массивы
Основные операции
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017")
db = client["myapp"]
users_collection = db["users"]
# Create (Insert)
user = {"name": "Alice", "email": "alice@example.com"}
result = users_collection.insert_one(user)
print(result.inserted_id) # ObjectId
# Read (Find)
user = users_collection.find_one({"email": "alice@example.com"})
all_users = list(users_collection.find({"age": {"$gt": 25}}))
# Update
users_collection.update_one(
{"_id": result.inserted_id},
{"$set": {"age": 31}}
)
# Delete
users_collection.delete_one({"email": "alice@example.com"})
Индексы
Ускоряют поиск:
# Создать индекс
users_collection.create_index("email", unique=True)
users_collection.create_index([("name", 1), ("age", -1)])
# Посмотреть индексы
for index in users_collection.list_indexes():
print(index)
Репликация (Replica Set)
МongoDB использует replica sets для отказоустойчивости:
Primary (читает и пишет)
├── Secondary 1 (синхронизирует данные из Primary)
└── Secondary 2 (синхронизирует данные из Primary)
Если Primary падает, один из Secondary становится новым Primary.
Шардинг (Sharding)
Для горизонтального масштабирования:
Config Servers (метаданные)
Query Router (mongos)
├── Shard 1 (часть данных)
├── Shard 2 (часть данных)
└── Shard 3 (часть данных)
Данные распределяются по шардам на основе ключа шардирования.
Отличия от SQL
| Характеристика | MongoDB | SQL |
|---|---|---|
| Модель | Документ | Таблица |
| Схема | Гибкая (schema-less) | Строгая |
| Транзакции | С версии 4.0 (multi-document) | Встроены |
| Соединения | Нет (денормализация) | JOIN |
| Масштабирование | Horizontal (шардинг) | Vertical |
Агрегация (Pipeline)
Аналог GROUP BY в SQL:
pipeline = [
{"$match": {"status": "active"}},
{"$group": {"_id": "$category", "count": {"$sum": 1}}},
{"$sort": {"count": -1}},
{"$limit": 10}
]
result = users_collection.aggregate(pipeline)
for doc in result:
print(doc)
Типичные случаи использования
- Content Management Systems — гибкая структура документов
- Real-time Analytics — быстрая запись больших объёмов
- IoT Applications — шардинг для масштабирования
- User Profiles — вложенные структуры для профилей
MongoDB отличный выбор, когда нужна гибкость в структуре данных и горизонтальное масштабирование.