Me he dado cuenta de dónde trabajo, la gente está interesada en almacenar información en los nombres de los archivos y analizar los nombres de los archivos.
Para mí, esto no parece ser una práctica especialmente buena. Ya veo los problemas ocasionales con las secuencias de comandos que bloquean un archivo y obtienen el incorrecto porque otro archivo coincide primero. También estamos discutiendo cómo solucionar problemas con separadores para los campos.
¿Se considera mala práctica o no?
¿Cuáles son otras soluciones aceptadas para recuperar archivos de un sistema de archivos basado en algún tipo de metadatos?
programming-practices
wobbily_col
fuente
fuente
Respuestas:
Sí, creo que es una mala práctica. Está sujeto a todo tipo de problemas, por ejemplo, límites de longitud, problemas de codificación y conflictos debido a datos duplicados.
Mejor es usar un "archivo maestro" (a veces llamado manifiesto o índice) que contiene metadatos y rutas a los archivos. O algo similar en una base de datos, registro o cualquier otra cosa. O para colocar los metadatos dentro de los archivos reales, en el nivel superior de alguna estructura de datos contenida en el archivo, por ejemplo, en JSON o XML.
Esto es algo análogo al concepto de poner información o claves de espacios de nombres en almacenes de valores clave. Creo que esto está bien siempre que lo use solo para el espacio de nombres y realice búsquedas rápidas: los componentes clave no están allí para proporcionar información analizable. Si necesita esa información, duplíquela en el valor (archivo en el caso anterior).
fuente
Primero, los metadatos son un concepto borroso.
Dicho esto, ya existen muchos casos de metadatos en los archivos:
Sin embargo, esa lista corta no es un argumento a favor de la práctica.
Las alternativas son:
fuente
Parece que necesitas una base de datos.
Existen muchos problemas de seguridad al poner los datos del usuario en los nombres de los archivos. Digamos que tiene un archivo para cada usuario ("username.txt"). Lo que sucede cuando alguien registra el nombre de usuario "../../../../etc/passwd" depende de cómo esté filtrando la entrada del usuario.
Los marcos de bases de datos a veces lo ayudarán a desinfectar la entrada del usuario.
fuente
No ... bueno ... no necesariamente.
Siempre que tenga una convención estricta y medios de análisis y validación comunes (scripts, bibliotecas, etc.) disponibles, estará listo.
Tomemos, por ejemplo, los sistemas de gestión de paquetes y dependencias (Maven, NuGet y similares). Aunque muchos usarán archivos específicos para metadatos para almacenar la información más avanzada, la información básica a menudo es parte del nombre del archivo. Basándose en convenciones estrictas, el nombre del archivo puede contener la información más pertinente sobre el paquete: es el proveedor, su nombre, su versión, su tipo. A veces eso es todo lo que necesita ... 4 o 5 piezas cortas de información.
Si los metadatos son simples, entonces una convención de nomenclatura de archivos tiene mucho sentido y no requiere nada. Se puede fortalecer con herramientas y scripts muy simples, sin necesidad de una base de datos, sin infraestructura especializada, solo unos pocos scripts y una convención de nomenclatura.
Si nada por ahí hace lo que necesita y sus necesidades son simples, comenzaría con esto.
sus requisitos superan esta convención? extiéndalo con un archivo de metadatos adecuado. ¿Más tarde necesitas una mejor búsqueda para esto? Ya existen buenas soluciones para buscar archivos que lo lleven a donde lo necesita.
No es que no me gusten las bases de datos, sino que son realmente poderosas y útiles, pero requieren una cierta sobrecarga para comenzar. Deben instalarse, respaldarse, mantenerse, necesitará personal que, si no está completamente dedicado, deberá dedicar parte de su tiempo a esta infraestructura. También son más complejos y crípticos para los legos, pierden el desarrollador que lo configuró y su sistema se atascará a tiempo hasta que encuentre un reemplazo.
Nunca subestimes el poder de la baja tecnología con la supervisión adecuada que puede llevarte lejos.
Y cuando supere su solución de baja tecnología, habrá reunido toda la experiencia y los requisitos para implementar el sistema perfecto para sus necesidades.
fuente
En primer lugar, pongámonos de acuerdo en lo que un archivo es . Un archivo es un paquete de datos con un nombre que se puede transmitir, recibir, crear y eliminar con operaciones atómicas (muy cercanas).
Muchos sistemas de archivos (Mac OS y sistemas de archivos Linux más recientes) implementan "bifurcaciones", a menudo utilizadas para almacenar recursos y metadatos. Este enfoque para almacenar metadatos era problemático porque los métodos tradicionales de transferencia de red, los métodos de copia de seguridad y restauración y los métodos de copia de archivos eran inconsistentes, especialmente cuando los sistemas de archivos de origen y destino entendían las bifurcaciones de archivos de manera diferente.
El nombre del archivo se usa para contener metadatos porque a) siempre está allí, b) los metadatos siempre han estado presentes en el nombre del archivo (al menos en el uso de extensiones de archivo), yc) el nombre del archivo sufre muy poca traducción al moverse entre sistemas (distinciones de casos, limitaciones de juego de caracteres, limitaciones de caracteres a un lado).
Por lo tanto, el nombre del archivo es visible, portátil y manejable. Esto no es malo para almacenar algunos metadatos.
Probablemente la mejor solución para abordar los metadatos de archivos generales es usar un repositorio de contenido , donde el repositorio de contenido se puede configurar con el esquema de metadatos que se utilizará para los archivos. En muchos casos, esto es excesivo, pero, en mi humilde opinión, es el camino a seguir para la gestión seria de metadatos.
fuente
Mi opinión sobre esto es que puede haber visto algún código en algún lugar que hace cosas descuidadas o frágiles con los nombres de archivo, pero eso no significa que "almacenar metadatos en nombres de archivo" sea malo en general.
Los nombres de archivo son metadatos: son datos sobre los datos del archivo, independientemente de los datos del archivo en sí. De hecho, los nombres de archivo son tan antiguos que probablemente sean el ejemplo canónico de metadatos.
Si considera que las extensiones de archivo son solo la parte final del nombre de archivo, entonces el concepto de nombre de archivo como metadatos se vuelve aún más inevitable.
fuente