Skip to content

Instantly share code, notes, and snippets.

@edudant
Created October 16, 2025 06:30
Show Gist options
  • Save edudant/24dbfd8b4e72dbb5d0d0474bb236e242 to your computer and use it in GitHub Desktop.
Save edudant/24dbfd8b4e72dbb5d0d0474bb236e242 to your computer and use it in GitHub Desktop.

Partitioning / Data aging

Správa dat a jejich životního cyklu.

Rozdělení dat dle typu:

  • Primární data
    • Živé záznamy v inventory (EntityInstance a EntityInstanceConfiguration[active = CURRENT|active = PENDING])
    • Aktivní objednávky (Order[status = IN_PROGRESS] a OrderLine)
    • Bulk importy (RegisterValue)
  • Historické záznamy
    • Historické záznamy v inventory (EntityInstance a EntityInstanceConfiguration[active = HISTORY])
    • Historické objednávky (Order[status != IN_PROGRESS] a OrderLine)
  • Logy
    • Historie běhu procesu ()
    • Integrační logy ()
    • Aplikační logy - ty jdou do centrálního Elastic O2 a v projektu je tedy neřešíme

Partitioning v Postgres

Primární data jsou vždy uložená v DB (Postgres), persistence je zajištěna prostředky Azure a pravidelným zálohováním (dodavatel neřeší).

Pro data aging nás tedy zajímají primárně následující tabulky:

  • ord.ordt_order
  • ord.ordt_order_line
  • inv.invt_ent_inst
  • inv.invt_ent_inst_conf
  • config.cnft_register_value

Přehled největších tabulek lze získat pomocí dotazu:

SELECT n.nspname AS schema,
c.relname AS table,
pg_size_pretty(pg_total_relation_size(c.oid)) AS total_size,
pg_size_pretty(pg_relation_size(c.oid)) AS table_size,
pg_size_pretty(pg_indexes_size(c.oid)) AS indexes_size
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
ORDER BY pg_total_relation_size(c.oid) DESC
LIMIT 50;

Ukázka výstupu (po zátěžových testech ne PRE):

schema table total_size table_size indexes_size
ord ordt_order_line_warm_202510 71 GB 57 GB 14 GB
inv invt_ent_inst_conf_p_default 68 GB 44 GB 24 GB
ord ordt_order_line_p_default 47 GB 35 GB 12 GB
inv invt_ent_inst_p_default 26 GB 22 GB 4486 MB
ord ordt_order_warm_202510 17 GB 16 GB 1060 MB
config cnft_register_value 7998 MB 5631 MB 2365 MB
ord ordt_order_p_default 4925 MB 4192 MB 731 MB
ord ordt_order_line_hot_20250919 1210 MB 0 bytes 1210 MB
ord ordt_order_line_hot_20250910 1097 MB 870 MB 227 MB

Orders

Odmazávání je zajištěno pomocí partitioningu.

  • Pro živá data vzniká každou hodinu samostatná LIVE partition (např. ordt_order_live_2025090811 / ordt_order_line_live_2025090811)

  • Jakmile je objednávka ukončená, přesouvá se do WARM partition (např. ordt_order_warm_202510 / ordt_order_line_warm_202510)

  • Každou hodinu běží JOB pro smazání předchozí LIVE partition. Pokud obsahuje nějaké neukočnené objednávky, nejprve se odloží do HOT partition

  • HOT partition je pouze jedna, obsahuje tedy dlouho běžící objednávky (nebo objednávky v chybě)

  • Každý měsíc se vytváří nová WARM partition

  • WARM partition starší než 6 měsíců se automaticky odmazávají

  • Proces:

    1. Vytvoření partition “pro budoucí data”
      • Název dle lifecycle a času
    2. Přesunutí dat z DEFAULT partition, pokud tam jsou. (Nemají být.)
    3. Vytvoření check constraint do DEFAULT partition.
    4. Přesun dat dle jejich LIFECYCLE
    5. Odpojení a smazání již nepoužívaných partition.

Elasticsearch

  • ILM u Elasticsearch (nebo delete_by_query**):** Index Lifecycle Management v Elasticsearch pro správu životního cyklu dat.
  • TODO:
    • jakým způsobem mazat Camunda historii?
      • HistoryService.cleanUpHistoryAsync?
    • jak mazat objednávky?
    • jak je zas obnovit po připojení partition?

Order

o2-kiporder_20250904_142206 93.6 GB

  • Order
  • Tasks (nested)
  • OrderLine (parent/child)

-> Nastavit na shardy velikosti cca 20 GB

  • Vytvořit nový index (standardně jako v aplikaci, sharding)
  • Přepnout alias na nový index
  • Doindexovat historická data za poslední měsíc

Inventory

o2-kipinventorytree_20250908_085931 71.2 GB

  • InventoryTree

-> Nastavit na shardy velikosti cca 20 GB

  • Vytvořit nový index (standardně jako v aplikaci, sharding)
  • Přepnout alias na nový index
  • Doindexovat historická data za poslední měsíc

Historie procesu

ILM - Index Lifecycle Management

o2-kip-camunda-history-activity-instance 153 GB o2-kip-camunda-history-historic-variable 68.2 GB o2-kip-camunda-history-historic-process-instance 10.8 GB o2-kip-camunda-history-user-operation-log 7.4 GB o2-kip-camunda-history-historic-job-log 228 MB o2-kip-camunda-history-incident 16 MB o2-kip-camunda-history-historic-task-instance 5.74 MB o2-kip-camunda-history-historic-identity-link-log 1.5 MB

Logy

ILM - Index Lifecycle Management

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment