Tagsistant es un sistema de archivos semántico para el kernel de Linux , escrito en C y basado en FUSE . A diferencia de los sistemas de archivos tradicionales que utilizan jerarquías de directorios para localizar objetos, Tagsistant introduce el concepto de etiquetas .
Diseño y diferencias con los sistemas de archivos jerárquicos
En informática, un sistema de archivos es un tipo de almacenamiento de datos que se utiliza para guardar, recuperar y actualizar archivos . Cada archivo se localiza de forma única mediante su ruta . El usuario debe conocer la ruta de antemano para acceder a un archivo, y esta no necesariamente incluye información sobre su contenido.
Tagsistant utiliza un enfoque complementario basado en etiquetas . El usuario puede crear un conjunto de etiquetas y aplicarlas a archivos, directorios y otros objetos ( dispositivos , tuberías , etc.). A continuación, puede buscar todos los objetos que coincidan con un subconjunto de etiquetas, denominado consulta. Este enfoque es idóneo para gestionar contenido de usuario como imágenes, grabaciones de audio, vídeos y documentos de texto, pero es incompatible con archivos del sistema (como bibliotecas, comandos y configuraciones), donde la univocidad de la ruta es un requisito de seguridad para evitar el acceso a contenido no autorizado.
El directorio tags/
Un sistema de archivos Tagsistant cuenta con cuatro directorios principales:
- archivo/
- relaciones/
- estadísticas/
- etiquetas/
Las etiquetas se crean como subdirectorios del tags/directorio y se pueden usar en consultas que cumplan con esta sintaxis:
tags/subquery/[+/subquery/[+/subquery/]]/@/[ 1 ]
donde una subconsulta es una lista ilimitada de etiquetas, concatenadas como directorios:
tag1/tag2/tag3/.../tagN/
La porción de una ruta delimitada por tags/y @/es la consulta propiamente dicha. El +/operador une los resultados de diferentes subconsultas en una sola lista. El @/operador finaliza la consulta.
Se devolverá como resultado de la siguiente consulta:
tags/t1/t2/+/t1/t4/@/
Un objeto debe estar etiquetado como ambos t1/o t2/como ambos t1/y t4/. Cualquier objeto etiquetado como t2/o t4/, pero no como t1/no se recuperará.
La sintaxis de consulta viola deliberadamente la semántica del sistema de archivos POSIX al permitir que un token de ruta sea descendiente de sí mismo, como en tags/t1/t2/+/t1/t4/@donde t1/aparece dos veces. Como consecuencia, un escaneo recursivo de un sistema de archivos Tagsistant terminará con un error o entrará en un bucle infinito, como lo hace Unixfind :
~/tagsistant_mountpoint$ buscar etiquetas/ etiquetas/ etiquetas/documento etiquetas/documento/+ etiquetas/documento/+/documento etiquetas/documento/+/documento/+ etiquetas/documento/+/documento/+/documento etiquetas/documento/+/documento/+/documento/+ [ ... ]Este inconveniente se compensa con la posibilidad de listar las etiquetas dentro de una consulta en cualquier orden. La consulta tags/t1/t2/@/es completamente equivalente a tags/t2/t1/@/y tags/t1/+/t2/t3/@/es equivalente a tags/t2/t3/+/t1/@/.
Este @/elemento tiene como objetivo preciso restaurar la semántica POSIX: la ruta tags/t1/@/directory/hace referencia a un directorio tradicional y un escaneo recursivo de esta ruta se realizará correctamente.
El razonador y el directorio de relaciones
Tagsistant cuenta con un sencillo sistema de razonamiento que amplía los resultados de una consulta incluyendo objetos etiquetados con etiquetas relacionadas. Dentro del relations/directorio se puede establecer una relación entre dos etiquetas siguiendo un patrón de tres niveles:
relations/tag1/rel/tag2/
El relelemento puede ser includes o is_equivalent . Para incluir la etiqueta rock en la etiqueta musicmkdir , se puede utilizar el comando Unix :
mkdir -p relations/music/includes/rock
El razonador puede resolver relaciones de forma recursiva, lo que permite la creación de estructuras complejas:
mkdir -p relations/music/includes/rockmkdir -p relations/rock/includes/hard_rockmkdir -p relations/rock/includes/grungemkdir -p relations/rock/includes/heavy_metalmkdir -p relations/heavy_metal/includes/speed_metal
La red de relaciones creada dentro del relations/directorio constituye una forma básica de ontología .
Complementos de etiquetado automático
Tagsistant cuenta con una pila de complementos de etiquetado automático que se llama cuando se escribe un archivo o un enlace simbólico. [ 2 ] Cada complemento se llama si su tipo MIME declarado coincide
La lista de complementos funcionales lanzados con Tagsistant 0.6 se limita a:
- text/html: etiqueta el archivo con cada palabra en
<title>los elementos y también<keywords>con document , webpage y html - imagen/jpeg: etiqueta el archivo con cada etiqueta Exif
El repositorio
Cada sistema de archivos Tagsistant tiene un repositorio correspondiente que contiene un archive/directorio donde se guardan los objetos y un tags.sqlarchivo que almacena la información de etiquetado como una base de datos SQLite . Si se especificó el motor de base de datos MySQL--db con el argumento, el tags.sqlarchivo estará vacío. Otro archivo, denominado repository.ini, es un almacén GLib ini con la configuración del repositorio. [ 3 ]
Tagsistant 0.6 es compatible con los dialectos SQL de MySQL y SQLite para el razonamiento y la resolución de etiquetas. Si bien es posible adaptar su lógica a otros dialectos SQL, deben tenerse en cuenta las diferencias en las estructuras básicas (especialmente la palabra clave SQL INTERSECT).
Los directorios archive/ y stats/
El archive/directorio se ha introducido para proporcionar una forma rápida de acceder a los objetos sin usar etiquetas. Los objetos se listan con su número de inodo como prefijo. [ 4 ]
El stats/directorio incluye algunos archivos de solo lectura con estadísticas de uso. Un archivo configurationcontiene información sobre el tiempo de compilación y la configuración actual del repositorio.
Principales críticas
Se ha destacado que depender de una base de datos externa para almacenar etiquetas e información de etiquetado podría causar la pérdida total de metadatos si la base de datos se corrompe. [ 5 ]
Se ha destacado que el uso de un espacio de nombres plano tiende a sobrecargar el tags/directorio. [ 6 ] Esto podría mitigarse introduciendo etiquetas triples .
Véase también
Referencias
- ↑ "etiquetas/ y relaciones/ directorios" .
- ↑ "¿Cómo escribir un plugin para Tagsistant?" .
- ↑ "Analizador de archivos clave-valor" .
- ^ "Cómo utilizar Tagsistant 0.6: Inodos" .
- ↑ "Atributos extendidos y sistemas de archivos de etiquetas" .
- ↑ " El principal problema de este enfoque es la escalabilidad" . news.ycombinator.com
Enlaces externos
- Sitio web oficial
- Paquete de Arch Linux archivado el 28/08/2019 en Wayback Machine.
- Debate en Hacker News
- Sistemas de archivos de etiquetas y atributos extendidos
- Asistente de producción
- Sistemas de archivos informáticos
- Gestión de datos
- Sistemas de archivos semánticos