← Назад к вопросам

Какие знаешь типы хранения данных в БД?

2.0 Middle🔥 151 комментариев
#Базы данных (NoSQL)#Базы данных (SQL)

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Типы хранения данных в базах данных

Выбор хранилища напрямую влияет на производительность, масштабируемость и стоимость приложения. Разберу основные категории.

Реляционные БД (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Структурированные данные, ACIDPostgreSQL, MySQL
DocumentИерархические данные, гибкая схемаMongoDB, CouchDB
Key-ValueКэширование, сессии, быстрые поискиRedis, Memcached
ColumnМасштабируемость, аналитикаCassandra, HBase
SearchПолнотекстовый поискElasticsearch
GraphСоциальные сети, рекомендацииNeo4j
Time-SeriesМетрики, мониторингInfluxDB, Prometheus

Опытные разработчики используют полипсоту — комбинируют разные хранилища для разных целей.