/dev/null rejette immédiatement toute entrée, mais il est présenté de façon satirique comme un système qui respecte parfaitement les propriétés ACID des transactions
- Du point de vue de l’atomicité (Atomicity), les données ne sont jamais écrites partiellement : soit elles disparaissent entièrement, soit elles ne sont pas écrites du tout
- En matière de cohérence (Consistency), il reste toujours vide, si bien que les invariants du système ne sont jamais violés
- Pour l’isolation (Isolation), même si plusieurs processus y accèdent simultanément, ils n’interfèrent pas entre eux, et comme rien n’est stocké, aucun conflit ne survient
- La durabilité (Durability) est parfaite en ce sens qu’après un redémarrage, il conserve toujours son état de « rien du tout » ; sa seule limite, évoquée avec humour, est une capacité de stockage de 0 octet
Analyse des propriétés ACID de /dev/null
/dev/null est un fichier spécial qui accepte toutes les entrées pour les jeter immédiatement, et sert couramment de puits de données (sink) sur les systèmes Linux et Unix
- L’auteur le compare à une base de données « web scale », en appliquant de manière satirique les propriétés ACID, au cœur des bases de données
- Au final,
/dev/null est parfaitement stable, tout en illustrant une simplicité extrême puisqu’il ne stocke absolument aucune donnée
Atomicity — Atomicité
- Quand on écrit des données dans
/dev/null, elles disparaissent toutes ou ne sont pas écrites du tout, sans aucune écriture partielle
- Cela correspond exactement au principe transactionnel du « tout ou rien (all or nothing) »
/dev/null garantit donc une atomicité parfaite, sans échec partiel ni transition d’état incomplète
Consistency — Cohérence
/dev/null reste toujours dans un état vide, et aucune entrée ne peut rompre cet invariant
- Même lorsque des données y sont écrites, elles sont immédiatement rejetées, si bien que le système passe toujours vers un état valide
- Par conséquent, l’invariant selon lequel « le fichier ne contient rien » reste toujours vrai
Isolation — Isolation
- Même si plusieurs processus écrivent simultanément dans
/dev/null, aucun conflit ni aucune interférence ne se produisent
- Comme rien n’est réellement stocké, les transactions n’ont absolument aucun effet les unes sur les autres
- Cela en fait une implémentation idéale de l’isolation, garantissant des résultats cohérents même dans un environnement parfaitement parallèle
Durability — Durabilité
/dev/null valide les données en les commettant « durablement dans le néant »
- Même si le système plante ou redémarre, l’état de
/dev/null ne change pas
- Autrement dit, il garantit parfaitement la persistance du néant
Limites et conclusion humoristique
- L’auteur relève comme unique problème de
/dev/null un « espace de stockage de 0 octet »
- Il conclut en plaisantant que, si vous avez besoin de plus d’espace, il faut contacter « l’équipe commerciale enterprise » (c’est-à-dire, en réalité, lui-même)
- C’est une satire des pratiques marketing exagérées de l’industrie IT autour de la capacité et des performances des bases de données
1 commentaires
Commentaires sur Hacker News
L’ancienne discussion HN est visible ici
fastjson, un parseur JSON ultra-rapide (lien GitHub)/dev/nullcomme DB sans que personne ne s’en rende compte, avec nocode pour le backend/dev/null, on n’a pas eu un seul problème lié aux utilisateursDire que
/dev/nullsatisfait ACID, c’est comme la solution triviale d’une DBCela restait quand même une bonne lecture pour rappeler que des notions comme ACID n’existent pas dans le vide (lien de référence)
/dev/null/dev/nulldans ce genre de casQuand la sortie doit aller quelque part mais qu’on ne veut pas se demander si cet endroit peut l’absorber, ça marche très bien
En phase de déploiement, il suffit ensuite de remplacer par un stockage validé
/dev/null, c’est un peu la commandetruedu monde du stockage/dev/nullettruefont à mon avis partie du haut du classement des outils sans bug/dev/nulloffre toujours une cohérence immédiate, est toujours disponible et possède une tolérance au partitionnement parfaiteC’est la seule DB qui conserve un CAP complet même en montant à une infinité de nœuds
/dev/null0et/dev/null1par politiqueEn cas d’incident, ils mettent à jour manuellement le lien symbolique, et l’usage en production est interdit si l’audit sarbox n’est pas validé
/devn’était pas monté/dev/nullest sérialisable selon de nombreuses définitions académiques, mais pas strictement sérialisableOn peut considérer que toutes les lectures ont lieu à l’instant 0 et renvoient un résultat vide, tandis que les écritures sont simplement jetées au moment où elles surviennent
Le point essentiel, c’est qu’il faut exiger une garantie en temps réel
Le système
/dev/nulln’a qu’un seul état/dev/nullest web scale/dev/nullpeut aussi faire tourner des sites comme zombo.comOn peut le voir sur supersimplestorageservice.com,
et cela a aussi été discuté plusieurs fois sur HN par le passé (lien de recherche)
/dev/nullest toujours vide, mais en réalité **