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

Что такое база данных?

1.0 Junior🔥 171 комментариев
#Базы данных (NoSQL)#Базы данных (SQL)

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

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

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

Что такое база данных

База данных (БД) - это организованная система хранения и управления структурированными данными, обеспечивающая надежное сохранение, быстрый поиск и согласованность информации.

Основные характеристики

Ключевые свойства:

  1. Структурированность - данные организованы в таблицы, документы или другие структуры
  2. Персистентность - данные сохраняются на диск и остаются после перезагрузки
  3. Точка единственного источника истины - одна копия данных, все изменения в одном месте
  4. Управление доступом - контроль того, кто может читать и писать данные
  5. Защита от сбоев - резервные копии и восстановление после отказов

Типы баз данных

Реляционные (SQL):

import psycopg2

# PostgreSQL - самая популярная реляционная БД
conn = psycopg2.connect("dbname=mydb user=postgres")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE age > %s", (18,))
results = cursor.fetchall()
conn.close()

Данные организованы в таблицы с фиксированной схемой:

  • Users (id, name, email, created_at)
  • Orders (id, user_id, total, created_at)

Ключевые свойства: ACID, транзакции, join операции

NoSQL документные базы (MongoDB):

from pymongo import MongoClient

client = MongoClient(mongodb://localhost:27017/)
db = client.mydb
collection = db.users

# Документ хранится как JSON
user = {
    "name": "John",
    "email": "john@example.com",
    "address": {
        "city": "Moscow",
        "zip": "12345"
    }
}
collection.insert_one(user)
result = collection.find_one({"name": "John"})

Данные гибкие, без фиксированной схемы, масштабируются горизонтально

Key-Value хранилища (Redis):

import redis

r = redis.Redis(host=localhost, port=6379)
r.set(user:123:name, John)        # Строка
r.set(user:123:age, 25)             # Число
r.lpush(user:123:tags, developer) # Список
r.get(user:123:name)                # Получить значение

Очень быстрые, хранят данные в памяти, используются для кеша

Time-series (InfluxDB, Prometheus):

# Для хранения метрик и временных рядов
# Пример: температура датчика каждую секунду
metrics = [
    {"timestamp": "2024-01-01T10:00:00", "temperature": 23.5, "location": "room1"},
    {"timestamp": "2024-01-01T10:00:01", "temperature": 23.6, "location": "room1"},
]

ACID свойства (Реляционные БД)

# Atomicity - все или ничего
try:
    cursor.execute("UPDATE users SET balance = balance - 100 WHERE id = 1")
    cursor.execute("UPDATE users SET balance = balance + 100 WHERE id = 2")
    conn.commit()  # Либо обе операции выполнены, либо откачены обе
except:
    conn.rollback()  # Откат при ошибке

# Consistency - данные остаются консистентными
# Есть constraints, triggers, которые это обеспечивают

# Isolation - транзакции не влияют друг на друга
# Levels: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE

# Durability - после commit, данные сохранены навсегда

Индексы для оптимизации

# Без индекса: SELECT * FROM users WHERE email = john@example.com
# Сканирует все 1 миллион строк

# С индексом:
# CREATE INDEX idx_email ON users(email)
# Находит за логарифмическое время

# В Python ORM:
from sqlalchemy import create_engine, Column, String, Index
from sqlalchemy.orm import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    email = Column(String, unique=True)  # Автоматический индекс
    __table_args__ = (
        Index(idx_email, email),  # Явный индекс
    )

Когда какую БД использовать

ЗадачаБаза данныхПричина
Веб-приложение с релациямиPostgreSQLACID, надежность, SQL
Высоконагруженный кешRedisСкорость в памяти
Гибкие схемы, документыMongoDBМасштабируемость, гибкость
Аналитика, временные рядыClickHouse, InfluxDBОптимизация для чтения
Графы и связиNeo4jСпециализация по графам

Практические советы

  1. Нормализация - избегай дублирования данных
  2. Индексирование - индексируй столбцы в WHERE и JOIN
  3. Резервные копии - regular backups спасают жизнь
  4. Мониторинг - следи за производительностью запросов
  5. Масштабирование - репликация (master-slave) или шардинг
Что такое база данных? | PrepBro