Ответ
Да, в проекте используется партиционирование таблиц в PostgreSQL для оптимизации работы с большими объемами данных.
Техническая реализация:
Основные таблицы (например, журналы событий или транзакций) разбиты по диапазону дат (RANGE partitioning). Это позволяет эффективно выполнять запросы, фильтруемые по временному периоду, за счет автоматического отсечения партиций (partition pruning).
-- Пример создания партиционированной таблицы
CREATE TABLE event_log (
id BIGSERIAL,
event_time TIMESTAMPTZ NOT NULL,
payload JSONB
) PARTITION BY RANGE (event_time);
-- Создание партиций по месяцам
CREATE TABLE event_log_2024_01 PARTITION OF event_log
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
CREATE TABLE event_log_2024_02 PARTITION OF event_log
FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');
Преимущества и практика:
- Производительность: Запросы с условием
WHERE event_time >= ...сканируют только релевантные партиции. - Управление данными: Упрощается архивация или удаление старых данных (
DROP PARTITION). - Поддержка в JPA/Hibernate: Партиционированные таблицы используются прозрачно для бизнес-логики. Однако для операций массовой вставки (bulk insert) рекомендуется явно указывать целевую партицию или использовать нативные запросы для оптимизации.