JSON como Almacén de Metadatos para Archivos

Hay veces que necesitas gestionar una colección masiva de archivos, como películas o scripts, y te preguntas si existe una forma eficiente de anclar información extra a cada uno. ¿Podemos usar JSON para almacenar metadatos directamente? La respuesta es sí, y es una práctica bastante común cuando no necesitamos la complejidad de una base de datos completa.

Diagrama mostrando cómo un archivo de video se empareja con su correspondiente archivo JSON que contiene los metadatos.
Estrategia de almacenamiento: un archivo JSON dedicado acompaña a cada archivo de medios para guardar sus metadatos directamente al lado del archivo original.

Existen varias estrategias para implementar esto. La más simple es tener un JSON por archivo físico. Si tienes un archivo de video, creas uno al lado con su metadatos específicos.

Otra opción es usar un único JSON para toda una carpeta, mapeando los nombres de los archivos a sus datos. Esto puede ser muy eficiente cuando hay miles de archivos en el mismo directorio.

Las ventajas son claras: es fácil de leer, compatible con cualquier lenguaje y Git muestra claramente los cambios. Sin embargo, las desventajas aparecen cuando la colección crece. Buscar por un campo implica cargar todo el JSON, y si dos programas escriben al mismo tiempo, pueden corromperlo.

En esos casos, suele ser mejor usar SQLite o una mezcla de ambos. Muchos gestores de medios usan una base de datos principal y un archivo JSON para datos generados dinámicamente sin tocar los archivos originales.

El problema del hash en archivos grandes

A veces se propone calcular hashes criptográficos, como SHA-256, para identificar archivos. Pero esto tiene un inconveniente importante: requiere leer absolutamente todo el archivo.

Gráfico comparativo entre la velocidad de cálculo de hash en un SSD NVMe versus un disco duro mecánico.
Comparativa de rendimiento: calcular hashes en diferentes medios de almacenamiento revela que el disco es el principal limitante para archivos grandes.

En un archivo de 50 GB, eso significa leer 50 GB del disco. Dependiendo del medio de almacenamiento, los tiempos varían drásticamente:

  • SSD NVMe: unos 15–20 segundos.
  • Disco duro mecánico: entre 3 y 6 minutos.

Aunque no consume mucha CPU, el cuello de botella suele ser la velocidad de lectura del disco. Por eso muchos programas usan estrategias más rápidas como identificar por ruta, tamaño o fecha de modificación.

Una alternativa interesante es usar BLAKE3 en lugar de SHA-256. Produce un identificador tan fiable pero procesa los datos con mucha mayor velocidad, aunque el tiempo total sigue limitado por la velocidad del disco.