Tagsistant

From Wikipedia, the free encyclopedia

Tagsistant
Developed by Tx0 <tx0@strumentiresistenti.org>
Written in C
OS Linux and BSD kernels
Available in English
Genre Semantic File System
License GNU GPL
Website http://www.tagsistant.net/
Tagsistant
Developer Tx0
Full name
Introduced ()
Partition identifier
Structures
Directory contents
File allocation
Bad blocks
Limits
Max file size
Max number of files
Max filename length
Max volume size
Allowed characters in filenames {{{filename_character_set}}}
Features
Dates recorded
Date range
Date resolution
Forks
Attributes
File system permissions
Transparent compression
Transparent encryption
Supported operating systems

Tagsistant is a Semantic File System written in C, compatible with Linux and BSD kernels using FUSE.

[edit] Tagging and retrieving files

Tagsistant is intended as a personal tool for information management. It provides a private space in which users can store information organizing them by meaning rather than with a fixed positional scheme, as in traditional file systems.

Tagsistant uses file system's well known concept of directory with new intuitive meaning: a directory is a tag. Creating a new directory means creating a new tag. Copying or moving a file inside a directory means tagging a file.

Browsing a Tagsistant file system means doing logical queries to retrieve files. Tagsistant uses a simple query language formed only by tag names and logical operators OR and AND. Joining two tags with AND will restrict results to files tagged with both tags. Joining two tags with OR will start a new query subset, merging results from previous subset with result from next subset.

As an example suppose that user created directory mountain and copied files pict3021.jpg and pict6452.jpg in it, and after created directory summer_2007 and copied files pict3021.jpg and pict8902.jpg in it. Querying /mountain/AND/summer_2007/ will return file pict3021.jpg only, because it was the only being tagged with both tags. Querying /mountain/OR/summer_2007/ will result in pict3021.jpg, pict6452.jpg and pict8902.jpg, because every file tagged as mountain or summer_2007 will be a valid result.

While browsing a tagsistant file system, user can be in one of two states:

  • Path ends with a tag: listing contents will result in files matching query path, added with logical operators OR and AND featuring as two directories.
  • Path is null or ends with a logical operator: listing contents will result in all created tags featuring as directories.

[edit] Storage backend

Tagsistant stores files and meta information in a directory called repository. Inside that directory is placed the archive directory, which contains all contents tagged (mainly files). Files are stored in this directory only. As a consequence, file pict3021.jpg shown in previous example allocates space only once, even if virtually present in two tag directories.

Tagsistant is designed to be light and efficient enough to run even on small devices like PDA. First implementation was based on symbolic links. Tags were created as real directory inside repository tags directory and files were tagged establishing a symbolic link inside each tag directory. Major flaws of this design were high consumption of inodes on real file system and high computational time required to fulfill each request.

Next implementation is based on SQLite. While the archive directory is still present, the tags directory was replaced by tags.sql SQLite archive. New backend internally uses SQL queries to retrieve tagged files and to store results in a timestamped cache, improving performance and avoiding duplicated queries.