GaiaEx AcademyGaiaEx Academy
KDB+/Q: мова тікових баз даних
РозробникПрограмування11 min read

KDB+/Q: мова тікових баз даних

Як Волл-стріт зберігає й опитує мільярди точок ринкових даних

Поділитися

KDB+ і Q за одну хвилину

KDB+ — це стовпчикова (column-oriented) база даних часових рядів; Q — її векторна мова. Sell-side та buy-side компанії прийняли її для зберігання тіків, з’єднань та ковзної аналітики, де сканування стовпців перевершує цикли по рядках.

Продуктивність досягається завдяки стовпчиковій організації даних, активному використанню відображення пам’яті (memory mapping) та векторних примітивів, реалізованих близько до «металу». Це не заміна для загального OLTP — вона налаштована саме на append-heavy часові ряди (переважно дописування, а не оновлення).

Стовпчикова організація (концептуально) sym A A B time t₁ t₂ t₃ price p₁ p₂ p₃ Векторні операції торкаються суміжних масивів → зручних для кешу сканувань Схема й типи все ще важливі: погані списки sym коштують місця
Таблиці — це стовпчикові вектори; аналітика фільтрує й агрегує дані за стовпцями та часом.

Основи Q

Q — лаконічна мова, обчислення виконуються справа наліво. Вектори — рідний тип даних; цикли існують, але на «гарячих» шляхах виконання їх уникають. Таблиці — це словники стовпців, що відповідає способу зберігання тікових даних.

prices: 100.5 101.2 99.8
avg prices
deltas prices

Читабельний код Q досягається невеликими функціями та коментарями — сама лише щільність запису не є перевагою у спільних кодових базах.

Tickerplant, RDB, HDB

Типовий паттерн: tickerplant приймає потоки даних і розсилає їх підписникам; real-time database (RDB) утримує поточну сесію; historical database (HDB) зберігає партиційовану історію на диску. Процеси наприкінці дня переносять дані з RDB у партиції HDB.

select last price by sym from trades where time > .z.t - 00:05

Крипторинок ніколи не закривається, тому межі «сесії» — це операційне рішення, а не сигнал біржового дзвінка.

Тіковий конвеєр (класична трійка) Обробники фідів Нормалізація символів Часова метка на межі Tickerplant Журнал + pub/sub Без довгострокового зберігання RDB + HDB Внутрішньоденна vs історична Партиціонування за датою Відновлення прогалин відбувається через журнали; перевіряйте прогалини у фідах і пізні виправлення Крипто-фіди можуть бути пульсуючими: розраховуйте розмір буферів і зворотний тиск
Розділення даних у реальному часі та історичних даних тримає «гарячі» шляхи невеликими, а запити — передбачуваними.

Де це застосовується

Компанії використовують KDB+ для дашбордів моніторингу, аналітики квот та дослідницьких датасетів. Назви й реалізації відрізняються; спільний паттерн — швидке порізане (slice-and-dice) вибирання даних із тіків та ордерів.

Крипторинки генерують безперервний потік даних — плануйте зберігання, повторне відтворення та експорт для комплаєнсу заздалегідь.

Вартість ліцензії та альтернативи

Комерційне ліцензування та специфічний найм персоналу — реальні витрати. Відкриті альтернативи (ClickHouse, Timescale, QuestDB, DuckDB над Parquet) обмінюють відповідність екосистемі на ціну. Тестуйте продуктивність на власному наборі запитів, а не на презентаціях постачальника.

Крипто-стеки тікових даних

Багато команд поєднують Kafka чи Redpanda зі стовпчиковим зберіганням та SQL-рушіями. Незмінне правило з часів KDB+ досі діє: партиціонуйте за часом, тримайте суворі схеми та вимірюйте наскрізну затримку від часової метки біржі до результату запиту.

Споживачам API GaiaEx варто логувати серверні часові метки й ідентифікатори послідовності, якщо вони доступні — кореляція краща за припущення.