main

Планы на следующие версии xa-tags

После тестирования в боевых условиях на большой базе решил отметить версию как 0.3 и двигаться дальше.

Что всплыло в процессе использования:

Нужно разделение по категориям

Мешать в одну кучу теги картинок с joyreactor'а, документальных фильмов и видео с ютуба - неудобно, это как лебедь, рак и щука в одной повозке. Значит нам нужно как-то разделить области.

Возможны несколько способов для достижения требуемого:

  • добавлять "сервисный" тег "category:", держать всё в одной базе.
  • разделить базу по принципу: одна категория - одна база, переключение выносится в отдельный ключ (например -n/--namespace), причём категорию можно определять автоматически, по пути.

Склоняюсь ко второму варианту (хоть он и сложнее), т.к.

  • устроить "свалку" никогда не поздно
  • "сервисные" теги от этого никуда не денутся
  • появится возможность для каждой конкретной категории определить способ взаимодействия с базой. (unix:/tcp:)

Нужен конфиг

Для реализации предыдущей фичи, нам нужна поддержка конфига.

Простого ini-style должно хватить. Мне, например, нравится конфиг rsync'а.

mode = tool

[default] # имя категории
path = / # путь

[devel]
path = ~/devel/xa-tags

[joyreactor]
path = /mnt/data/lol/images/joyreactor

В клиент-серверной версии это может выглядеть так:

mode = client

[default]
path = /

[joyreactor]
path = /mnt/data/lol/images/joyreactor # недоступно нам на запись
ipc = unix:///var/run/xa-tags.sock

[films]
path = /mnt/remote/ftp/films # user-xattr через самбу работают с бубном
ipc = tcp://192.168.10.1:1740

Как это работает в теории:

Если известно примерное местонахождение файла, начинаем перебирать категории из конфига в поисках наиболее близкого пути. Не нашли - берём [default].

Смотрим на ipc, лезем в базу, работаем.

Расширенный поиск по тэгам

Очень нужно. Нужно как минимум отрицание тега.

Вообще, хорошо бы прикрутить регэкспы. PCRE не имеет смысла брать, очень уж оно мощное, а вот POSIX стоит попробовать.

Как оно работает сейчас: берётся первый тэг из поиска, выполняется SELECT ... LIKE ... ко всей таблице, достаём результат из базы, и выкидываем оттуда всё, что не содержит остальных тегов.

Поскольку ни LIKE, ни MATCH не поддерживают регэкспы, видится такая модификация:

  • анализируем теги, делим на 2 части по признаку: регексп/подстрока
  • по первой подстроке выполняем запрос, достаём результаты, как и в существующей реализации.
  • ищем в каждой строке результата остальные теги и применяем регекспы.
  • выдаём то что прошло через "сито"
  • ...
  • ПРОФИТ

Тоже, вполне себе большая работа. Нужно будет или модифицировать data_t или определить новый тип для хранения условий поиска.

Версии

Я хочу оставить ветку 0.X для простых утилит, без конфига.

Поэтому, после реализации поиска буду выделять новую ветку в развитии.

              [поиск] [конфиг]  [категории] [libxa-*sql]

                   ,--> 1.0 ------> 1.1 ------> 1.2
                  /
0.1 --> 0.3 --> 0.4 --> 0.X (багфиксы)
         ^-- мы здесь

Итого

Теперь о грустном. Текущими темпами работы мне ещё года на 2-2,5. :-(