Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Columnar / HTAP Tables

Source of truth: RFC-2026-092, RM-0.6.4.0 Sprint 3.

Что такое HTAP row-column store

AngaraBase поддерживает хранение таблиц в HTAP row-column формате (HtapRowColumn): строки пишутся через обычный WAL, колонки сегментированы в ColumnStore (SegmentManifest). Это позволяет обслуживать OLTP транзакции и AP-сканы из одной таблицы.

Векторный конвейер (OLAP)

Для высокопроизводительной аналитики (OLAP) используется Vector Pipeline, который задействует SIMD и параллельную агрегацию напрямую из колоночных данных.

Создание HTAP-таблицы (copy-paste готово)

Есть два эквивалентных синтаксиса:

-- Вариант 1: PostgreSQL-style USING (рекомендуется)
CREATE TABLE metrics (
    ts        TIMESTAMPTZ NOT NULL,
    device_id INT         NOT NULL,
    value     FLOAT8
) USING COLUMNAR;

-- Вариант 2: WITH-опция (явный alias)
CREATE TABLE events (
    id   SERIAL PRIMARY KEY,
    data TEXT
) WITH (storage = 'columnar');

-- Вариант 3: каноническое имя движка
CREATE TABLE events2 (
    id   SERIAL PRIMARY KEY,
    data TEXT
) WITH (storage = 'htap_row_column');

Все три формы эквивалентны: таблица создаётся с TableStorageEngineV0::HtapRowColumn в catalog.

Проверка engine в catalog

-- Через sys_catalog (RM-0.6.4.0)
SELECT table_name, storage_engine
FROM sys.tables
WHERE table_name = 'metrics';

Фоновая компактизация (L1 Compaction)

Начиная с RM-0.6.4.8, angarabase поддерживает фоновую компактизацию (L1 Compaction) для columnar таблиц. Компактизатор объединяет мелкие L0 сегменты в крупные L1 pack-файлы, что снижает нагрузку на inodes и улучшает сжатие. Процесс работает полностью прозрачно.

Метрики для мониторинга компактизации:

  • angarabase_columnar_compaction_total
  • angarabase_columnar_compaction_duration_ms
  • angarabase_columnar_direct_io_fallback_total

Ошибки и их смысл

Неизвестный USING метод → 0A000

ERROR:  USING brin is not a supported storage method; ...
SQLSTATE: 0A000 (feature_not_supported)

Что делать: используйте USING COLUMNAR, USING htap_row_column (→ HTAP), или опустите USING (→ row_store по умолчанию).

Недопустимое значение storage

ERROR:  storage expects one of: row_store, memory, columnar, htap_row_column
SQLSTATE: 42601 (syntax_error)

Что делать: используйте одно из перечисленных значений.

Non-goals (Phase 1, RM-0.6.4.0)

  • SegmentManifest auto-init при создании таблицы — deferred to Sprint 4 (OQ-S3-3).
  • OOM protection для Column Cache — Sprint 4 (OQ-S3-4).
  • Полная AP-оптимизация сканов — RFC-2026-092 Phase 2.

Связанные