← Назад к курсу

Пособие по работе с 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-образы рекомендуются).