2009-02-07 18 views
6

Dada una colección de archivos que tendrán metadatos asociados, ¿cuáles son los métodos recomendados para almacenar estos metadatos?Métodos para almacenar metadatos asociados con archivos individuales?

Algunos formatos de archivos admiten el almacenamiento interno de metadatos (EXIF, ID3, etc.), pero no todos los formatos de archivo lo admiten, así que ¿cuáles son las opciones más generales?

Algunos de los metadatos casi con seguridad serían únicos (títulos/descripciones/etc.), mientras que algunos serían repetitivos en diversos grados (categorías/etiquetas/etc.).
También puede ser útil agrupar los metadatos, si se requieren diferentes tipos de atributos.

Idealmente, las soluciones deberían cubrir conceptos, en lugar de implementaciones de lenguaje específicas.

Respuesta

1

Una opción podría ser una base de datos relacional, estructurado así:

FILE 
f_id 
f_location 
f_title 
f_description 

ATTRIBUTE 
a_id 
a_label 

VALUE 
v_id 
v_label 

METADATA 
md_file 
md_attribute 
md_value 

Esta aplicación tiene alguna información única (título/descripción), pero se dirigidos principalmente a los grupos repetitivos de datos.

Para algunos requisitos, otras tablas menos genéricas pueden ser más útiles.


Esto tiene ventajas de esto es que las bases de datos relacionales son muy comunes, y obviamente muy bueno en el manejo de las relaciones y almacenar gran cantidad de datos.

Sin embargo, para algunos usos un servidor de base de datos trae una sobrecarga que podría no ser deseable. Además, el servidor de la base de datos es distinto de los archivos; no se sientan juntos y requieren diferentes métodos de interacción.

Las bases de datos no se sientan (fácilmente) bajo el control de la versión, lo que puede ser bueno o malo, dependiendo de su punto de vista y necesidades específicas.

1

El texto sin formato tiene algunas ventajas obvias sobre cualquier otra cosa. Algo así como

FileName = 'ferrari.gif' 
Title = 'My brand new car' 
Tags = 'cars', 'cool' 
Related = 'michaelknight.mp3' 

archivos Picasa.ini de Picasa son un buen ejemplo de este tipo de metadatos. Además, en lugar de inventar su propio formato, vale la pena considerar XML. Hay muchos procesadores DOM fácilmente disponibles para manejar este formato.

Por otra parte, si la cantidad de archivos y las relaciones entre ellos es enorme, las bases de datos pueden ser mejores.

+0

[No hay tal cosa como texto sin formato] (http://www.joelonsoftware.com/articles/Unicode.html) De hecho, ahora estoy buscando una forma de almacenar la codificación del juego de caracteres de texto como metadatos sobre un archivo. –

+0

Para todos los fines prácticos, [UTF-8] (http://utf8everywhere.org/) es texto sin formato. –

4

Para almacenar los metadatos en la base de datos tiene algunas ventajas, pero el principal problema con la base de datos es que los metadatos no están conectados directamente a sus datos. Es más robusto si los metada permanecen con los datos, como un archivo especial en el directorio o algo así.

Algunos sistemas de archivos ofrecen una funcionalidad especial que se puede usar para metadatos, como NTFS Alternate streams. Desafortunadamente, esto se puede usar para el almacenamiento de metadatos solo en casos especiales, porque esas transmisiones se pueden perder fácilmente al copiar datos al sistema de almacenamiento que no lo admite. Creo que los sistemas de archivos de Linux también tienen un mecanismo de almacenamiento similar.

De todos modos, las soluciones más comunes son:

  • archivo oculto por separado (s) (por directorio) que tienen metadatos
  • alguna aplicación utiliza directorio oculto especial con metadatos (como la subversión, cvs etc.)
  • o base de datos (de varios tipos) para todos metada específico de la aplicación - esta base de datos puede ser utilizado también con fines de almacenamiento en caché en la mayoría de los casos

OMI no existe una solución de propósito general. Elegiría el almacenamiento de metadatos en un archivo oculto (solidez) con el uso de la base de datos para un acceso rápido y el almacenamiento en caché.

2

Creo que la "solución" depende en gran medida de lo que vas a hacer con los metadatos.

Por ejemplo, casi todos los metadatos que almacenamos (Múltiples conjuntos de datos de datos científicos) se cortan y almacenan en una base de datos. Esto nos permite crear conjuntos de datos para preservar los metadatos comunes entre los archivos (como dices, categorías y etiquetas) mientras tenemos estructuras específicas de archivos (título, hora de inicio/finalización, valores mínimos/máximos, etc.). Mientras que pudimos mantener estos en archivos ocultos, hacemos una gran cantidad de búsquedas y abrimos nuestra interfaz a los consumidores externos a través de servicios web.

Si está almacenando metadatos que no se van a buscar, los archivos ocultos o un archivo .xml dedicado por archivo "real" no es una mala ruta. Es básicamente legible, se puede convertir a diferentes formatos fácilmente y no se perderá si decide cambiar su mecanismo de almacenamiento.

Los metadatos deberían ayudarlo, no obstaculizarlo. He visto (y he sido parte de) sistemas en los que el almacenamiento de metadatos se ha vuelto más engorroso que el almacenamiento de los datos reales, y se convirtió en una responsabilidad. Solo tenga en cuenta lo que está tratando de hacer con él, y no se exagere con "what ifs".

0

Yo, básicamente, hacer una base de datos de metadatos que celebró esta información:

resource_table
RESOURCE_ID
RESOURCE_TYPE (carpeta, tipo de documento, enlace web, otros)
RESOURCE_URL (cualquier URL)

NOTES_TABLE
NOTE_ID
RESOURCE_NO
RESOURCE_NOTE (texto largo)

TAGS_TABLE
tag_id
RESOURCE_NO
TAG_TEXT

Entonces me gustaría utilizar las notas de texto campo de la nota a la carpeta/archivo/recurso. Elija si usaría 1: 1 o 1: N para esto.

El campo de etiquetas que usaría para almacenar cualquier cantidad de parámetros de búsqueda como AÑO, PROYECTO y otros valores que describirán y agruparán su contenido.

Posteriormente, se podría añadir tablas para el propietario, las partes interesadas, y otra información de organización, etc.

Cuestiones relacionadas