Files
trade-doc/dlob-retention-feature-store-plan.md

5.4 KiB

DLOB Retention And Feature Store Plan

Status na 2026-03-29.

Ten dokument zapisuje robocze ustalenia o:

  • retencji danych DLOB na mevnode_bot
  • ryzyku zajetosci dysku
  • tym, co warto trzymac dlugo pod modele / "economic transformers"

Aktualny stan operacyjny

Dysk

  • root / na mevnode_bot: 3.6T
  • zajete: ok. 471G
  • wolne: ok. 3.0T
  • biezace uzycie: ok. 14%

Najwiekszy konsument miejsca:

  • PostgreSQL / TimescaleDB na local volume poda postgres-0
  • rozmiar bazy crypto: ok. 457 GB

Najwieksze hypertable:

  • public.dlob_all_derived_ts: ok. 260 GB
  • public.dlob_hot_snapshot_ts: ok. 177 GB
  • public.dlob_hot_derived_ts: ok. 19 GB

Wniosek:

  • miejsca nie brakuje teraz
  • ale storage DLOB jest juz na tyle duzy, ze trzeba nim zarzadzac swiadomie

Od kiedy sa dane

  • dlob_hot_snapshot_ts: od 2026-03-17 00:23:36.013+00
  • dlob_hot_derived_ts: od 2026-03-17 00:23:36.013+00
  • dlob_all_derived_ts: od 2026-03-17 00:44:42.386+00

Aktualna retencja TimescaleDB

Na 2026-03-29 retencja jest juz ustawiona i joby sa Success.

  • dlob_hot_snapshot_ts: 30 days
  • dlob_all_derived_ts: 30 days
  • dlob_hot_derived_ts: 180 days
  • legacy dlob_stats_ts / dlob_depth_bps_ts / dlob_slippage_ts*: 7 days

Wazne doprecyzowanie:

  • stare rekordy nie beda "nadpisywane"
  • stare chunki beda usuwane przez polityki retencji

Praktycznie:

  • tabele 30-day zaczna byc realnie przycinane okolo 2026-04-16
  • dlob_hot_derived_ts zacznie byc realnie przycinane dopiero po osiagnieciu ok. 180 days

Czy trzeba juz robic ring buffer

Nie pilnie.

Lepsza kolejnosc:

  1. Zostawic obecna retencje.
  2. Sprawdzic po 2026-04-16, czy 30-day tabele rzeczywiscie zaczely sie wyplaszczac rozmiarowo.
  3. Wlaczyc kompresje TimescaleDB dla duzych hypertabli.
  4. Dopiero potem decydowac, czy potrzebny jest dodatkowy custom ring buffer.

Powod:

  • miejsca jest duzo
  • retencja juz istnieje
  • najwiekszy zysk teraz da kompresja, nie customowa logika bufora

Wazna obserwacja

Na 2026-03-29 kompresja TimescaleDB dla tabel dlob_* jest wylaczona:

  • public.dlob_all_derived_ts: compression_enabled = false
  • public.dlob_hot_snapshot_ts: compression_enabled = false
  • public.dlob_hot_derived_ts: compression_enabled = false

To jest najprostszy kandydat na kolejny krok oszczedzania miejsca.

Co warto trzymac dlugo dla modeli

Nie warto trzymac wszystkiego w raw snapshotach.

Do treningu modeli bardziej oplacalne jest trzymanie:

  • stalych cech numerycznych
  • etykiet future outcome
  • kilku skal czasowych

Zamiast:

  • pelnego payload JSON
  • wszystkich poziomow bids/asks dla kazdego ticka
  • duplikowania raw i derived w dlugim horyzoncie

Rekomendowana piramida danych

Warstwa 1. Short-term raw

Przechowywac krotko jako source of truth:

  • dlob_hot_snapshot_ts
  • dlob_all_derived_ts

Cel:

  • debugging
  • replay
  • reprocessing
  • walidacja feature engineering

Warstwa 2. Feature bars

Z raw / derived budowac stale, numeryczne wektory cech:

  • 1s feature bars na 180d+
  • 5s albo 15s feature bars na 1y+
  • 1m regime bars bardzo dlugo

To powinno byc glownym wejsciem do modeli.

Warstwa 3. Labels

Osobno trzymac etykiety przyszlego wyniku:

  • fwd_ret_1s
  • fwd_ret_5s
  • fwd_ret_30s
  • fwd_ret_5m
  • max_up
  • max_down
  • adverse selection
  • fill probability proxy
  • edge net of fees / funding / slippage

Jakie cechy warto trzymac

Mikrostruktura

  • mid
  • microprice
  • spread_bps
  • mark - oracle
  • mid - oracle
  • basis

Plynnosc i ksiega

  • best_bid_size
  • best_ask_size
  • imbalance
  • depth w koszykach 1/2/5/10/20/50 bps
  • slope / curvature booka

Aktywnosc i jakosc feedu

  • liczba update'ow w bucketcie
  • udział indicative vs normalnych snapshotow
  • staleness feedu
  • luki czasowe

Statystyki krotkoterminowe

  • realized vol 5s
  • realized vol 30s
  • realized vol 5m
  • momentum score
  • mean reversion score
  • spread capture proxy
  • slippage dla stalych notionals

Proponowane tabele docelowe

Minimalny zestaw:

  • dlob_features_1s
  • dlob_features_5s
  • dlob_regime_1m
  • bot_labels_horizons

Kazda z tych tabel powinna miec:

  • event_ts
  • source
  • market_type
  • market_index
  • zestaw cech numerycznych
  • opcjonalnie meta

To da:

  • staly rozmiar rekordu
  • tansze trenowanie
  • latwiejsze sample / batch / join
  • mniej miejsca niz raw JSON

Dlaczego to jest lepsze od trzymania wszystkiego

Bo modele nie potrzebuja pelnego surowego payloadu do kazdego kroku.

Dla modeli wazniejsze sa:

  • stabilne, stale-wymiarowe wejscia
  • konsekwentne etykiety
  • latwe agregowanie po oknach czasu

Raw trzeba trzymac krotko. Feature store i labels trzeba trzymac dlugo.

Rekomendacja na kolejny tydzien

  1. Nie wdrazac jeszcze custom ring buffer.
  2. Zweryfikowac po 2026-04-16, czy 30-day retencja rzeczywiscie przycina hot_snapshot i all_derived.
  3. Przygotowac plan wlaczenia kompresji TimescaleDB dla:
    • dlob_all_derived_ts
    • dlob_hot_snapshot_ts
    • dlob_hot_derived_ts
  4. Zaprojektowac schemat dlob_features_1s, dlob_features_5s, dlob_regime_1m, bot_labels_horizons.
  5. Uznac raw DLOB za short-term storage, a feature bars + labels za long-term storage pod modele.

Decyzja robocza

Obecny kierunek:

  • retencja raw zostaje
  • kompresja powinna byc kolejnym krokiem
  • dlugoterminowo nie trzymac wszystkiego jako raw snapshots
  • dla modeli przejsc na warstwy cech i etykiet o nizszej skali