Retour catalogue
Senior~10 hstorage

Gagner la guerre des petits fichiers

3 000 petits fichiers, queries qui crawlent. Compacte sans casser lectures concurrentes.

Contexte

Tu hérites d'une table Iceberg qui ingère 5 micro-batches par minute. Au bout d'une heure : 3 000 fichiers Parquet de 30 KB chacun. Tes dashboards Trino mettent 8 s à scanner ce qui devrait prendre 200 ms. C'est small files problem,piège storage le plus fréquent en lakehouse production.

Ton job : appliquer `rewrite_data_files` avec une target size de ~128 MB, un sort_order par `(tenant_id, event_time)`, et prouver gain mesurable. CI ne te croit pas sur parole : elle compte les fichiers avant/après et mesure les bytes scannés sur une requête de référence.

Bonus senior : tu prouves que ta compaction respecte snapshot isolation. Un canary append pendant rewrite ne doit pas être perdu,c'est bug classique de quelqu'un qui fait `overwrite(scan_result)` au lieu de `rewrite_data_files`.

Architecture

Stack et flow du projet

Loading diagram…

Ce que tu vas livrer

  • Module `src/compact.py` qui appelle `rewrite_data_files` avec bonne stratégie
  • Un appel CLI `python -m src.compact` qui réduit nombre de fichiers d'au moins 95 %
  • Sort_order respecté dans les manifestes,bounds non chevauchants entre fichiers

Ce que CI vérifie

  • Baseline présente : >100 fichiers Parquet avant compaction
  • Après compaction : <20 fichiers (mesuré via `table.inspect.files()`)
  • Row count est exactement préservé (zéro perte, zéro duplicate)
  • Bytes scannés sur query benchmark décroissent significativement (manifestes Iceberg, pas de wall-clock)
  • Bounds des nouveaux fichiers respectent sort_order (overlap < 20 %)
  • Un canary append concurrent au rewrite n'est jamais perdu

Prérequis

  • Iceberg basique (avoir fait projet `partitioned-lakehouse` aide énormément)
  • Lecture des manifestes Iceberg (file format, data file vs delete file)
  • Notion de snapshot isolation

Comment ça marche

  1. 01

    Tu cliques « Commencer »

    On forke template sur ton compte GitHub. Aucune install locale, aucun Docker à débugger.

  2. 02

    Tu codes dans GitHub Codespaces

    VS Code dans ton navigateur, prêt à l'emploi : DBs locales, dépendances Python, tout dans devcontainer. 60h/mois gratuits chez GitHub.

  3. 03

    Tu pushes, CI te répond

    GitHub Actions exécute rubrique. Vert = validé. Rouge = chaque check échoué te dit ce qui manque, en français.

Information précontractuelle

  • Vendeur : Merta
  • Prix : 49 € TTC, franchise de TVA
  • Livraison : numérique, immédiate après paiement
  • Droit de rétractation : exclu après début d'exécution, voir case à cocher
  • Paiement sécurisé via Stripe

Achat soumis aux CGV.