Какие знаешь типы хранения данных в БД?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Типы хранения данных в базах данных
Выбор хранилища напрямую влияет на производительность, масштабируемость и стоимость приложения. Разберу основные категории.
Реляционные БД (RDBMS)
Структурированные данные в таблицах с чётко определённой схемой. Гарантируют ACID свойства.
PostgreSQL:
import psycopg2
conn = psycopg2.connect("dbname=mydb user=postgres")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE age > %s", (18,))
rows = cursor.fetchall()
MySQL/MariaDB:
- Быстрые чтения
- Меньше функций, чем PostgreSQL
- InnoDB для надёжности
NoSQL: Document Storage
Гибкая схема, самоописывающиеся документы. Идеально для быстрой разработки и иерархических данных.
MongoDB:
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017/")
db = client["mydb"]
collection = db["users"]
# Вставка
collection.insert_one({"name": "John", "age": 30, "skills": ["Python", "JS"]})
# Поиск
result = collection.find_one({"name": "John"})
CouchDB:
- HTTP API
- P2P синхронизация
- Хорошо для мобильных приложений
NoSQL: Key-Value Storage
Сверхбыстрое получение данных по ключу. Используется для кэширования и сессий.
Redis:
import redis
r = redis.Redis(host="localhost", port=6379, decode_responses=True)
# Строки
r.set("user:1:name", "John")
name = r.get("user:1:name")
# Структуры
r.lpush("queue:tasks", "task1", "task2")
r.hset("user:2", mapping={"name": "Jane", "age": 25})
# TTL
r.setex("session:abc123", 3600, "user_data")
Memcached:
- Простой in-memory кэш
- Нет персистентности
NoSQL: Column-Family Storage
Оптимизированы для больших объёмов данных с частыми агрегациями по колонкам.
Apache Cassandra:
- Горизонтальная масштабируемость
- Высокая доступность
- No single point of failure
Search Engines
Полнотекстовый поиск и аналитика. Индексируют данные для быстрого поиска.
Elasticsearch:
from elasticsearch import Elasticsearch
es = Elasticsearch([{"host": "localhost", "port": 9200}])
# Индексирование
es.index(index="articles", id=1, body={
"title": "Python Best Practices",
"content": "..."
})
# Поиск
results = es.search(index="articles", body={
"query": {"match": {"title": "Python"}}
})
Graph Databases
Структуры с узлами и связями. Идеальны для социальных сетей, рекомендательных систем.
Neo4j:
- Cypher query language
- Отношения первого класса
Time-Series Databases
Оптимизированы для метрик и временных рядов.
InfluxDB, Prometheus:
from influxdb import InfluxDBClient
client = InfluxDBClient(host="localhost", port=8086)
json_body = [{
"measurement": "cpu_load",
"tags": {"host": "server1"},
"fields": {"value": 0.64},
"time": "2024-01-01T00:00:00Z"
}]
client.write_points(json_body)
Выбор хранилища
| Тип | Используй когда | Примеры |
|---|---|---|
| RDBMS | Структурированные данные, ACID | PostgreSQL, MySQL |
| Document | Иерархические данные, гибкая схема | MongoDB, CouchDB |
| Key-Value | Кэширование, сессии, быстрые поиски | Redis, Memcached |
| Column | Масштабируемость, аналитика | Cassandra, HBase |
| Search | Полнотекстовый поиск | Elasticsearch |
| Graph | Социальные сети, рекомендации | Neo4j |
| Time-Series | Метрики, мониторинг | InfluxDB, Prometheus |
Опытные разработчики используют полипсоту — комбинируют разные хранилища для разных целей.