/dev/null descarta de inmediato toda entrada, pero se describe satíricamente como un sistema que cumple perfectamente con las propiedades ACID de las transacciones
- En términos de atomicidad (Atomicity), los datos no se escriben parcialmente: desaparecen por completo o no se escriben en absoluto
- En cuanto a consistencia (Consistency), siempre mantiene un estado vacío, por lo que nunca se rompen las condiciones invariantes del sistema
- En aislamiento (Isolation), aunque varios procesos accedan al mismo tiempo, no hay interferencia entre ellos y, como nada se almacena, no se producen conflictos
- La durabilidad (Durability) es perfecta porque, incluso después de reiniciar, sigue conservando la condición de “no haber nada”; aunque se menciona con humor que su única limitación es tener 0 bytes de almacenamiento
Análisis de las propiedades ACID de /dev/null
/dev/null es un archivo especial que recibe toda entrada y la descarta de inmediato, y en sistemas Linux y Unix suele usarse como un sumidero (sink) de datos
- El autor lo compara con una base de datos “web scale” y le aplica de forma satírica las propiedades fundamentales ACID de las bases de datos
- Como resultado,
/dev/null es perfectamente estable, pero muestra una simplicidad extrema al no almacenar absolutamente ningún dato
Atomicity — Atomicidad
- Cuando se escriben datos en
/dev/null, todo desaparece o no se escribe nada en absoluto; no existe escritura parcial
- Esto equivale al principio de las transacciones de “todo o nada” (all or nothing)
- Por lo tanto,
/dev/null garantiza una atomicidad completa, sin fallas parciales ni transiciones de estado incompletas
Consistency — Consistencia
/dev/null siempre permanece en un estado vacío, y ninguna entrada rompe esa condición invariante
- Aunque se escriban datos, se descartan de inmediato, por lo que el sistema siempre transita a un estado válido
- En consecuencia, el invariante de que “el archivo no contiene nada” siempre se mantiene verdadero
Isolation — Aislamiento
- Aunque varios procesos escriban simultáneamente en
/dev/null, no se producen conflictos ni interferencias
- Como no hay almacenamiento real, las transacciones no se afectan entre sí en absoluto
- Esto representa una implementación ideal de aislamiento, que garantiza resultados consistentes incluso en un entorno de paralelismo perfecto
Durability — Durabilidad
/dev/null hace commit de los datos como “un estado permanente de nada”
- Aunque el sistema falle o se reinicie, el estado de
/dev/null no cambia
- Es decir, garantiza perfectamente la persistencia de la nada
Limitaciones y conclusión humorística
- El autor señala como único problema de
/dev/null sus “0 bytes de espacio de almacenamiento”
- Remata con la broma de que, si se necesita más espacio, hay que contactar al “equipo de ventas enterprise” (que en realidad es el propio autor)
- Esto funciona como una sátira de las prácticas exageradas de marketing en la industria de TI en torno a la capacidad y el rendimiento de las bases de datos
1 comentarios
Comentarios en Hacker News
La discusión anterior en HN puede verse aquí
fastjson, un parser de JSON ultrarrápido (enlace de GitHub)/dev/nullcomo DB sin que nadie lo note, y el backend con nocode/dev/null, no he tenido ni un solo problema relacionado con usuariosQue
/dev/nullcumpla con ACID es como la solución trivial de una DBAun así, fue una buena lectura que recuerda que conceptos como ACID no existen en el vacío (enlace de referencia)
/dev/nullsí haya una excepción/dev/nullpara este tipo de propósito en la prácticaLo usas cuando la salida tiene que ir a algún lado, pero no quieres preocuparte de si ese lugar puede soportarlo
En la etapa de despliegue, luego lo cambias por un repositorio validado
/dev/nulles como el comandotruedel mundo del almacenamiento/dev/nullytrueestán entre lo más alto del ranking de cosas libres de bugs/dev/nullsiempre tiene consistencia inmediata, siempre está disponible y posee tolerancia a particiones perfectaEs la única DB que mantiene CAP completo incluso si escala a nodos infinitos
/dev/null0y/dev/null1por separadoEn caso de falla, actualizan manualmente el enlace simbólico, y si no pasa la auditoría de sarbox, su uso en producción queda prohibido
/devno estaba montado/dev/nulles serializable según muchas definiciones académicas, pero no es estrictamente serializableTodas las lecturas pueden ejecutarse en el instante 0 y devolver un resultado vacío, y las escrituras simplemente pueden descartarse cuando ocurren
El punto es que hay que exigir una garantía de tiempo real (real-time guarantee)
El sistema
/dev/nullsolo tiene un único estado/dev/nulles web scale/dev/nullincluso puede correr sitios como zombo.comPuede verse en supersimplestorageservice.com,
y también se discutió varias veces en HN antes (enlace de búsqueda)
/dev/nullsiempre está vacío, en realidad **