← Назад к вопросам
Какие инструменты использовал для работы с нереляционными БД?
2.0 Middle🔥 91 комментариев
#Архитектура приложений#Базы данных и SQL
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Инструменты для работы с нереляционными БД
MongoDB - Основной опыт
Инструменты:
1. MongoDB Compass (официальный GUI клиент)
- Интуитивный интерфейс для просмотра данных
- Построение query с помощью фильтров
- Экспорт/импорт данных
- Проверка индексов
- Статистика коллекций
2. MongoDB Shell (mongosh)
# Подключение
mongosh "mongodb://localhost:27017"
# Поиск документов
db.users.find({"email": "test@test.com"})
# Вставка
db.users.insertOne({"name": "John", "email": "john@test.com"})
# Обновление
db.users.updateOne({"_id": ObjectId(...)}, {$set: {"email": "new@test.com"}})
# Удаление
db.users.deleteOne({"_id": ObjectId(...)})
# Агрегация
db.users.aggregate([
{$match: {"status": "active"}},
{$group: {_id: "$city", count: {$sum: 1}}}
])
3. Python для работы с MongoDB
from pymongo import MongoClient
import pytest
@pytest.fixture
def mongo_client():
client = MongoClient("mongodb://localhost:27017")
yield client
client.close()
def test_create_user(mongo_client):
db = mongo_client["test_db"]
collection = db["users"]
# Вставить документ
user = {"name": "John", "email": "john@test.com", "age": 30}
result = collection.insert_one(user)
# Проверить что вставлено
found = collection.find_one({"_id": result.inserted_id})
assert found["name"] == "John"
def test_update_user(mongo_client):
db = mongo_client["test_db"]
users = db["users"]
# Обновить
users.update_one(
{"email": "john@test.com"},
{"$set": {"age": 31}}
)
# Проверить
user = users.find_one({"email": "john@test.com"})
assert user["age"] == 31
def test_query_users(mongo_client):
db = mongo_client["test_db"]
users = db["users"]
# Поиск с условиями
active_users = users.find({"status": "active"})
count = users.count_documents({"status": "active"})
assert count > 0
4. MongoDBAtlas (облачный MongoDB)
- Хостинг в облаке
- Автоматические резервные копии
- Мониторинг и алерты
- Поддержка различных версий
Redis - Кэширование и сессии
Инструменты:
1. redis-cli (командная строка)
# Подключение
redis-cli
# Установка значения
SET key "value"
SET user:1:name "John"
SET session:abc123 '{"user_id": 1}'
# Получение
GET key
GET user:1:name
# Список операций
LPUSH queue "task1"
RPUSH queue "task2"
LPOP queue
# Множество
SADD tags "python" "testing" "automation"
SMEMBERS tags
# Истечение
SET temp_value "data" EX 3600 # 1 час
# Удаление
DEL key
FLUSHALL # Очистить всё
2. Python для Redis
import redis
import pytest
@pytest.fixture
def redis_client():
client = redis.Redis(host="localhost", port=6379, db=0)
yield client
client.flushdb() # Очистить данные после теста
def test_cache_user(redis_client):
# Сохранить пользователя в кэш
user_data = {"id": 1, "name": "John"}
redis_client.setex(
"user:1",
3600, # TTL 1 час
str(user_data)
)
# Получить из кэша
cached = redis_client.get("user:1")
assert cached is not None
def test_queue_operations(redis_client):
# Добавить в очередь
redis_client.lpush("test_queue", "task1", "task2", "task3")
# Получить размер
length = redis_client.llen("test_queue")
assert length == 3
# Извлечь
task = redis_client.rpop("test_queue")
assert task is not None
def test_session_storage(redis_client):
session_id = "sess_abc123"
session_data = {"user_id": 1, "username": "john"}
# Сохранить сессию
redis_client.setex(
f"session:{session_id}",
7200, # 2 часа
str(session_data)
)
# Проверить
found = redis_client.get(f"session:{session_id}")
assert found is not None
Elasticsearch - Поиск и аналитика
Инструменты:
1. Kibana (веб-интерфейс)
- Визуализация данных
- Создание dashboards
- Поиск по логам
- Анализ индексов
2. Python для Elasticsearch
from elasticsearch import Elasticsearch
import pytest
@pytest.fixture
def es_client():
client = Elasticsearch(["localhost:9200"])
yield client
def test_index_document(es_client):
# Индексировать документ
doc = {
"title": "Test Article",
"content": "This is a test",
"author": "John"
}
result = es_client.index(
index="articles",
id=1,
body=doc
)
assert result["result"] in ["created", "updated"]
def test_search_documents(es_client):
# Поиск
query = {
"query": {
"match": {"title": "test"}
}
}
results = es_client.search(index="articles", body=query)
assert len(results["hits"]["hits"]) > 0
CouchDB - Документо-ориентированная БД
Инструменты:
1. Fauxton (веб-интерфейс CouchDB)
- Просмотр БД
- Создание/редактирование документов
- Просмотр views
2. curl для API
# Создать БД
curl -X PUT http://localhost:5984/mydb
# Вставить документ
curl -X POST http://localhost:5984/mydb \
-H "Content-Type: application/json" \
-d '{"name": "John", "email": "john@test.com"}'
# Получить документ
curl http://localhost:5984/mydb/docid
# Поиск
curl "http://localhost:5984/mydb/_find" \
-d '{"selector": {"type": "user"}}'
DynamoDB (AWS) - Управляемая NoSQL
Инструменты:
1. AWS Console
- Просмотр таблиц
- Мониторинг
- Настройка пропускной способности
2. boto3 (Python SDK для AWS)
import boto3
import pytest
@pytest.fixture
def dynamodb():
dynamodb = boto3.resource(
"dynamodb",
region_name="us-east-1"
)
yield dynamodb
def test_put_item(dynamodb):
table = dynamodb.Table("Users")
# Вставить
table.put_item(
Item={
"user_id": "1",
"name": "John",
"email": "john@test.com"
}
)
# Получить
response = table.get_item(Key={"user_id": "1"})
assert response["Item"]["name"] == "John"
Neo4j - Граф БД
Инструменты:
1. Neo4j Browser (веб-интерфейс)
- Визуализация графа
- Cypher query editor
- Статистика
2. Cypher язык запросов
# Создать ноды и связи
CREATE (user:User {name: "John", email: "john@test.com"})
CREATE (company:Company {name: "TechCorp"})
CREATE (user)-[:WORKS_AT]->(company)
# Поиск
MATCH (u:User {name: "John"})-[:WORKS_AT]->(c:Company)
RETURN u, c
# Удаление
MATCH (u:User {name: "John"})
DELETE u
3. Python для Neo4j
from neo4j import GraphDatabase
import pytest
@pytest.fixture
def neo4j_driver():
driver = GraphDatabase.driver(
"bolt://localhost:7687",
auth=("neo4j", "password")
)
yield driver
driver.close()
def test_create_user_relationship(neo4j_driver):
with neo4j_driver.session() as session:
session.write_transaction(
lambda tx: tx.run(
"CREATE (u:User {name: $name}) RETURN u",
name="John"
)
)
Резюме инструментов
| БД | Основной инструмент | Python | Когда использую |
|---|---|---|---|
| MongoDB | Compass, mongosh | pymongo | Документы, документо-ориентированные |
| Redis | redis-cli | redis-py | Кэш, сессии, очереди |
| Elasticsearch | Kibana | elasticsearch-py | Поиск, логи, аналитика |
| CouchDB | Fauxton | couchdb | Синхронизация, распределённость |
| DynamoDB | AWS Console | boto3 | AWS hosted, масштабирование |
| Neo4j | Browser | neo4j | Графовые данные, связи |
Мой опыт с NoSQL
Регулярно использую:
- MongoDB (основная)
- Redis (для кэша в каждом проекте)
Хороший опыт:
- Elasticsearch (для аналитики логов)
- DynamoDB (в AWS проектах)
Знаком с:
- CouchDB
- Neo4j
- Cassandra (базовое)
Best Practices при работе с NoSQL
- Используй правильный инструмент для работы
- Понимай различие между SQL и NoSQL запросами
- Индексируй часто используемые поля
- Тестируй масштабирование
- Мониторь производительность
- Проверяй консистентность данных
NoSQL БД требуют другого подхода чем SQL, но инструменты делают работу удобной.