Skip to content

Управление данными

Новый раздел

Этот раздел добавлен как дополнение к исходной структуре — конвенции работы с данными критичны для консистентности и масштабирования.

Принципы

  1. Database per Service — каждый сервис владеет своей БД
  2. Нет прямых запросов к чужим БД — только через API или события
  3. Миграции в коде — версионированные, идемпотентные, откатываемые
  4. Data ownership — у каждой сущности есть сервис-владелец

Конвенции именования

Таблицы

sql
-- snake_case, множественное число
users
payment_transactions
order_items

Колонки

sql
-- snake_case
id              -- UUID, primary key
created_at      -- timestamp with time zone
updated_at      -- timestamp with time zone
deleted_at      -- soft delete (nullable)
user_id         -- foreign key: <entity>_id
status          -- enum через CHECK constraint или отдельная таблица

Индексы

sql
-- idx_<table>_<columns>
idx_users_email
idx_payment_transactions_user_id_created_at

Миграции

Инструменты

Правила

  1. Миграции только вперёд — никаких ручных ALTER TABLE
  2. Каждая миграция имеет up и down
  3. Миграция не должна ломать работающий сервис (zero-downtime)
  4. Большие миграции — через expand-contract паттерн

Expand-Contract Pattern

Шаг 1 (expand):  Добавить новую колонку (nullable)
Шаг 2 (migrate): Мигрировать данные, обновить код
Шаг 3 (contract): Удалить старую колонку

Бэкапы

ПараметрЗначение
ЧастотаЕжедневные full, hourly incremental
Хранение30 дней
ТестированиеЕжемесячный restore test
RPO< 1 час
RTO< 4 часа

Чувствительные данные

  • PII (имя, email, телефон) — шифрование at rest
  • Данные карт — не хранятся (токенизация)
  • Логи — маскирование PII
  • Доступ к продакшен БД — через audit trail