вторник, 25 июня 2013 г.

Tagsistant: тег-ориентированная файловая система

Логотип

Здравствуйте, уважаемые Хабравчане!

Я хотел бы рассказать про такой интересный проект, как Tagsistant. Это ориентированная на теги файловая система в пользовательском пространстве (FUSE) для Linux и, возможно, других операционных систем с поддержкой этой технологии.

Tagsistant является свободным программным обеспечением с открытым исходным кодом: любой желающий может использовать или модифицировать его согласно лицензии, указанной автором.


Что-что?




Tagsistant работает в пользовательском пространстве и с пользовательскими правами. Это возможно с помощью специального модуля ядра — FUSE. Таким же образом построены такие файловые системы, как sshfs и encfs.

Отличия от традиционных файловых систем




Tagsistant отличается тем, что акцент здесь делается не на иерархию директорий, а на теги — метки, назначенные файлу. Если в «классической» иерархии между файлами и директориями используется отношение «много файлов к одной директории, файл принадлежит директории», то в Tagsistant реализовано отношение «у файла много тегов, у тега много файлов».

Для чего это всё?




Tagsistant позволяет взглянуть на организацию архивов документов, фото и видео совершенно с другой стороны, предоставляет гибкий способ упорядочивания данных.

Например, я хочу найти все фотографии с родителями и сестрой на море. Как насчёт решить такую задачу в традиционных файловых системах? «Ручками»?

С tagsistant'ом я просто указываю: мне, пожалуйста, всё, что помечено тегами photo, parents, sister и sea.


Это, конечно, требует заранее указать, что такие-то файлы принадлежат к таким-то тегам, но создание иерархии директорий в традиционной файловой системе тоже требует действий, при этом проигрывая в удобстве дальнейшего пользования.


Демонстрация


Запускаем в первый раз:



dfyz@alice ~ $ /opt/tagsistant/bin/tagsistant --repository=~/tagsistant-test.repo/ ~/tagsistant-test/
*** saving repository in ~/tagsistant-test.repo/

Tagsistant (tagfs) v.0.6 Build: 20130519.000 FUSE_USE_VERSION: 26
(c) 2006-2013 Tx0 <tx0@strumentiresistenti.org>
For license informations, see /opt/tagsistant/bin/tagsistant -h

Using default plugin dir: /opt/tagsistant/lib/
Loaded plugin: text/html -> libtagsistant_html-0.1.so
Loaded plugin: audio/mpeg -> libtagsistant_mp3-0.1.so
Loaded plugin: image/jpeg -> libtagsistant_jpeg-0.1.so
Loaded plugin: application/ogg -> libtagsistant_ogg-0.1.so
Loaded plugin: */* -> libtagsistant_generic-0.1.so

dfyz@alice ~ $ df -h ~/tagsistant-test
Filesystem Size Used Avail Use% Mounted on
tagsistant 35G 24G 9.6G 72% /home/dfyz/tagsistant-test



Получаем такую структуру:

dfyz@alice ~ $ ls tagsistant-test
archive relations stats tags



Никаких тегов пока ещё нет:

dfyz@alice ~ $ ls tagsistant-test/tags/
dfyz@alice ~ $



Создаём теги:

dfyz@alice ~ $ mkdir tagsistant-test/tags/warhammer40000
dfyz@alice ~ $ mkdir tagsistant-test/tags/photos



Наполняем их — добавляем файлы:

dfyz@alice ~ $ cp WarpTalon.jpg tagsistant-test/tags/warhammer40000/
cp: cannot create regular file ‘tagsistant-test/tags/warhammer40000/WarpTalon.jpg’: Read-only file system
dfyz@alice ~ $ cp WarpTalon.jpg tagsistant-test/tags/warhammer40000/@
dfyz@alice ~ $ cp photo/buOk8LSSnNM.jpg tagsistant-test/tags/photos/@



Здесь первый вызов cp провалился — я забыл указать @ в конце пути. Этот каталог используется для обозначения, что warhammer40000 — последний тег в цепочке запросов. Зачем это сделано — можно увидеть ниже.

Посмотрим теперь на наши теги:



dfyz@alice ~ $ ls tagsistant-test/tags
image photos warhammer40000



Заметно, что появился третий тег, которого мы не создавали — image. Это свою работу делают зачатки автоматического тегирования — tagsistant определил, что наши файлы — изображения.

dfyz@alice ~ $ ls tagsistant-test/tags/image/@
buOk8LSSnNM.jpg WarpTalon.jpg



Что, если мы хотим увидеть все изображения, относящиеся к Вархаммеру?

dfyz@alice ~ $ ls tagsistant-test/tags/image/warhammer40000/@
WarpTalon.jpg



Получилось вот так (Скриншот):
image


Под капотом




На самом деле, каждый смонтированный экземпляр имеет бэкэнд — репозиторий. Объекты хранятся в директории «archive» — используя нижележащую, реальную файловую систему.

Все метаданные — теги, отношения файлов к тегам, тегов к тегу — хранятся в SQL-базе. В случае SQLite — в файле tags.sql, в случае MySQL — в базе «tagsistant».


Версия 0.6




Не так давно вышла версия 0.6. В ней реализована дедупликация, что позволяет файловой системе занимать как можно меньше места, изменился синтаксис (на мой взгляд — в лучшую сторону), улучшена сеть отношений между тегами, а переход на libDBI открывает возможности по использованию других SQL-бекэндов в будущем.

Что дальше?




В данный момент Tagsistant всё ещё развивается. В качестве возможного направления развития автор рассматривает автоматическую расстановку тегов. Цитаты из переписки:


Если захочешь углубиться, в транке SVN есть версия 0.7, которая использует libextractor для получения метаданных из файлов и наконец-то имеет настоящий, рабочий стек плагинов для автоматических меток.


Вот небольшая дискуссия об автоматических тегах на форуме:

www.tagsistant.net/kunena/wish-list/29-machine-tags



Оригинал


If you want to go a bit further, in the SVN trunk you'll find the 0.7 release which uses libextractor to fetch metadata from files and finally implements a real, working stack of autotagging plugins.


Some discussion has started on the forum about machine tags, also known as faceted tags:

www.tagsistant.net/kunena/wish-list/29-machine-tags





Из второго письма:



Пока что, в 0.7 плагины автомаркировки создают теги вида «ключ: значение».

Например, JPEG-изображение может быть помечено как year:2010 и exposure:1_30.

Это засоряет директорию с тегами.


С машинными тегами у тебя будет пространство имён EXIF:/ с предиктатами

вроде year/ и apertrue/, а уже внутри них значения 2010/ и 1_30/ соответственно.

Директория тегов будет содержать только EXIF:/ кроме обычных тегов.

Гораздо чище и удобнее!





Оригинал


So far in 0.7, autotagging plugins create tags like «key:value/». For example

a JPEG image could be tagged as year:2010/ and exposure:1_30/.

This is ending in a clogged-up tags/ folder.


With machine tags you would have an EXIF:/ name space with predicate

tags like year/ and aperture/ and only inside year/ the value

2010/, and only inside aperture/ the value 1_30/.


The tags/ folder would contain just EXIF:/ beside your usual flat

tags. Much much cleaner and usable!





This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Комментариев нет:

Отправить комментарий