← Назад к курсу
Пособие по работе с NoSQL БД на Python
NoSQL (Not Only SQL) — нереляционные базы данных, предназначенные для работы с большими объемами неструктурированных/полуструктурированных данных.
Типы NoSQL БД и сценарии применения
| Тип | Примеры систем | Где лучше реляционных БД |
|---|---|---|
| Документные | MongoDB, CouchDB | Хранение JSON-данных, каталоги продуктов, контент-менеджмент |
| Ключ-значение | Redis, DynamoDB | Кэширование, сессии пользователей, очереди задач |
| Колоночные | Cassandra, HBase | Аналитика больших данных, IoT, временные ряды |
| Графовые | Neo4j, ArangoDB | Социальные сети, рекомендации, сети доставки |
Примеры кода на Python
1. MongoDB (документная БД)
Установка: pip install pymongo
from pymongo import MongoClient
# Подключение
client = MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["users"]
# Вставка документа
user_data = {"name": "Alice", "age": 30, "hobbies": ["coding", "hiking"]}
collection.insert_one(user_data)
# Поиск
result = collection.find_one({"name": "Alice"})
print(result) # Вывод: {'_id': ..., 'name': 'Alice', ...}
2. Redis (ключ-значение)
Установка: pip install redis
import redis
# Подключение
r = redis.Redis(host="localhost", port=6379)
# Запись и чтение
r.set("user:1", "{\"name\": \"Bob\", \"status\": \"active\"}")
data = r.get("user:1")
print(data.decode()) # Вывод: {"name": "Bob", "status": "active"}
# Работа с TTL (кэш с истечением)
r.setex("temp_session", 300, "session_data") # Удалится через 5 минут
3. Cassandra (колоночная БД)
Установка: pip install cassandra-driver
from cassandra.cluster import Cluster
# Подключение
cluster = Cluster(["localhost"])
session = cluster.connect("mykeyspace")
# Создание таблицы
session.execute("""
CREATE TABLE IF NOT EXISTS sensors (
sensor_id UUID PRIMARY KEY,
timestamp TIMESTAMP,
value FLOAT
)
""")
# Вставка данных
session.execute("""
INSERT INTO sensors (sensor_id, timestamp, value)
VALUES (uuid(), toTimestamp(now()), 23.5)
""")
4. Neo4j (графовая БД)
Установка: pip install neo4j
from neo4j import GraphDatabase
# Подключение
driver = GraphDatabase.driver("neo4j://localhost:7687", auth=("neo4j", "password"))
# Создание узлов и связей
def create_friend(tx, name, friend_name):
tx.run("CREATE (a:Person {name: $name})-[:FRIEND]->(b:Person {name: $friend_name})",
name=name, friend_name=friend_name)
with driver.session() as session:
session.execute_write(create_friend, "Alice", "Bob")
Когда NoSQL предпочтительнее реляционных БД?
- Гибкость схемы: Часто меняющиеся структуры данных.
- Масштабирование: Горизонтальное масштабирование для больших нагрузок.
- Специфичные сценарии:
- Высокая скорость записи/чтения (Cassandra для IoT).
- Сложные связи (Neo4j для соцсетей).
- Временные данные (Redis для кэша).
⚠️ Не используйте NoSQL, если:
- Требуются ACID-транзакции.
- Данные строго структурированы.
- Нужны сложные JOIN-запросы.
Полезные ресурсы
Для углубленного изучения экспериментируйте с локальными инсталляциями баз данных (Docker-образы рекомендуются).