2026 : Mac Mini loué en 7×24 — matrice LMDB vs RocksDB : écritures massives, fenêtres de compaction, checkpoints et seuils disque sur APFS
« Sur un nœud Apple Silicon loué qui tourne jour et nuit, colocaliser LMDB ou RocksDB avec des workers partage le même NVMe APFS : la compaction ou la croissance copy-on-write choisit souvent l’heure de votre incident — pas votre planning. »
Vous obtenez une matrice décisionnelle, un tableau de seuils (portes jaune/rouge), des extraits de configuration prêts à coller, une fenêtre nocturne type et une checklist marathon pour un seul Mini qui héberge à la fois files d’attente et stockage embarqué. Pour le même budget disque côté SQL et WAL, voir aussi FAQ fil de flottaison APFS et matrice SQLite WAL ; pour la persistance Redis voir AOF/RDB et SSD.
Risques typiques sur hôte unique loué
Un Mini loué partage CPU, bande passante NVMe et cache page avec l’observabilité et parfois des services « bureau ». Les moteurs KV amplifient le couplage entre écrivains de premier plan et threads d’entretien qui semblent inactifs jusqu’au premier stall.
- Dette de compaction (RocksDB). Le niveau zéro s’empile ; la latence p99 dérape pendant que le disque reste « occupé ».
- Croissance de carte (LMDB). Sans
mdb_env_set_mapsizeanticipé, la file d’attente bloque au pire moment. - Chevauchement checkpoint. CreateCheckpoint, copies
mdb_env_copyou archives tar dupliquent l’arbre pendant que les lots continuent — l’espace libre s’effondre. - Sémantique sync. Couper les fsync gagne du débit au prix d’une fenêtre de perte élargie après crash.
Matrice LMDB vs RocksDB
Mesurez l’amplification d’écriture sur votre SSD loué avant de figer les réglages ; les lignes ci-dessous résument le compromis lecture/écriture et l’IO d’arrière-plan.
| Dimension | LMDB | RocksDB |
|---|---|---|
| Modèle d’écriture | Un writer, pages mmap copy-on-write | Écrivains concurrents, WAL et memtables |
| Latence lecture | Très prévisible carte « chaude » | Dépend du block cache et de l’état compaction |
| IO arrière-plan | Faible hors sync / copie | Threads compaction peuvent saturer le disque |
| Ingest massif | Fort si lots sérialisés + charge lecture dominante | Fort si flush/levels calibrés et fenêtre nuit |
Liste de seuils : disque, compaction, charge
Reliez chaque signal à une action automatisable (throttle producteurs, pause checkpoint, ticket astreinte). Les valeurs sont des ordres de grandeur pour Mini interne ; ajustez avec votre marge data + métadonnées.
| Signal | Jaune (ralentir) | Rouge (stopper la ligne) |
|---|---|---|
| Espace libre APFS | ≈ 20 % libre ou < ~15 Go absolus | ≈ 10 % libre ou croissance incontrôlée |
| Octets compaction en attente (RocksDB) | > 50 % du baseline stable pendant ~20 min | Hausse continue + p99 ×2 sur trois scrapes |
| % busy disque | > 70 % ~10 min avec SLO manqué | > 85 % ~5 min avec backlog files |
| Stall écriture RocksDB | > 5 s cumulés / fenêtre 15 min | > 30 s deux fois en 1 h + pending ↑ |
Paramètres exécutables (amorçage)
Collez après mesure du débit régime établi ; gardez ~20 % de tête sur mapsize ou tailles de memtable.
LMDB — ouverture d’environnement
mdb_env_create(&env);
mdb_env_set_mapsize(env, 1ULL << 38); /* dimensionner avant gros import */
mdb_env_open(env, path, MDB_WRITEMAP | MDB_NOSUBDIR, 0644);
/* mdb_env_sync(env, 1) après chaque lot logique « checkpoint » */
Évitez MDB_NOSYNC en production ; préférez mdb_env_sync borné par lots documentés.
RocksDB — esquisse d’options
options.max_background_jobs = 2;
options.write_buffer_size = 64 << 20;
options.target_file_size_base = 256 << 20;
options.level0_file_num_compaction_trigger = 8;
write_options.sync = false; /* chemin batch ; sync ponctuel aux jalons */
/* DB::CompactRange dans la fenêtre nuit après seuil jaune OK */
Fenêtre nocturne recommandée
Ancrez sur l’heure locale du Mac loué pour aligner creux files et sommeil humain des opérateurs distants.
- Bande calme. Exécutez CompactRange, copies LMDB (
mdb_env_copy) et uploads entre 01:00 et 05:00 locale lorsque les files sont basses. - Décalaire. Laissez ~45 min entre fin compaction RocksDB et début copie LMDB pour laisser l’espace libre remonter.
- Checkpoints. Jalons logiques fréquents le jour ; tarball cohérent juste après compaction nocturne si le disque est vert.
Cinq gestes pour un marathon propre
- Mesurer Mo/s d’écriture et dimensionner
mdb_env_set_mapsizeouwrite_buffer_sizeavec marge ~20 %. - Tableaux de bord : espace libre, pending compaction bytes, secondes de write stall ; throttle producteurs au jaune.
- Si l’API le permet : désactiver compaction auto aux heures de pointe ; réactiver avant le script nuit.
- Checkpoint local seulement si jaune dégagé ; sinon flux hors machine incrémental.
- Exercice trimestriel de restauration sur une classe SKU équivalente.
FAQ courte
- LMDB supprime-t-il le besoin de checkpoints ?
- Non : gardez des points de reprise logiques et des copies hors boîte.
- RocksDB sur NFS depuis le même Mini ?
- Évitez NFS/SMB pour le chemin chaud ; la variance de latence casse les hypothèses de compaction.
- Quand paguer sur les stalls ?
- Si stalls > 30 s deux fois en une heure pendant que les octets en attente montent : le SKU est souvent trop petit pour la courbe d’ingest.
Forfaits, commande et capacité
Choisissez un NVMe interne dimensionné à ~2× le pic de données utiles, du CPU de réserve pour la compaction, et assez de RAM pour block cache + mmap chauds après maintenance nocturne. Ouvrez les forfaits pour comparer les paliers, puis commandez sans compte lorsque la matrice montre une limite de capacité plutôt qu’un simple réglage.
Synthèse. Verrouillez les portes APFS, déplacez la compaction vers la nuit, cadencez les checkpoints avec la croissance WAL. Si le disque reste rouge malgré les fenêtres : montez de forfait avant de micro-optimiser.
Repères citables : jaune ~20 % ou ~15 Go libres ; rouge ~10 % ; nuit 01:00–05:00 locale ; max_background_jobs = 2 ; présizer mapsize LMDB ; pas de MDB_NOSYNC sans validation risque.
Louez un nœud RunMini pour LMDB ou RocksDB 7×24
RunMini — Apple Silicon pour charges marathon et moteurs KV embarqués. Accueil, forfaits, aide SSH/VNC, commande sans friction, blog (disque, énergie, files).
Pensez à marquer l’accueil et le blog avant de redimensionner votre carte LMDB ou vos cibles de niveaux RocksDB.