sqlite3-poisk: листинг директории

Дополнил пакет sqlite3-poisk утилитой poisk-ls для построения листинга директории. Сделано это в целях получения списка файлов вместе с метаинформацией - mime-тип и заголовок, размер файла и проч., т.к. получение этих данных непосредственно из самого файла требует, во-первых, множества операций, во-вторых, достаточно ресурсоемко. Разумеется, для нагруженной системы при каждом обращении вызывать и указанную внешнюю утилиту построения листинга слишком расточительно, но кэш с временем жизни, скажем, 5 минут, спасет отца русской демократии (в качестве ключа кэша напрашивается имя директории - "dir" или имя директории,limit,offset -"dir,limit,offset").


$ poisk-ls
Usage: poisk-ls DATABASE LIMIT OFFSET DIR


$ time poisk-ls test.db 2 1 /
poisk_count = 3
poisk_counter = 2
rowid = 2
mtime = 2006-06-22
size = 20179
uri = /test.htm
dirname = /
filename = test.htm
mimetype = text/html
title = Тестовая страница

poisk_count = 3
poisk_counter = 3
rowid = 1
mtime = 2004-04-09
size = 446976
uri = /Эра Фанка.doc
dirname = /
filename = Эра Фанка.doc
mimetype = application/msword
title = Эра Фанка


real 0m0.012s
user 0m0.008s
sys 0m0.004s


$ time poisk-ls test.db 1 0 /humor
poisk_count = 8
poisk_counter = 1
rowid = 78
mtime = 2006-05-11
size = 3991
uri = /humor/Info.aspx.htm
dirname = /humor
filename = Info.aspx.htm
mimetype = text/html
title = ... Hо я писал на С++. - RSDN


real 0m0.012s
user 0m0.012s
sys 0m0.000s


Теперь мы можем показывать в листинге не просто имя файла, а его заголовок (существует для html, doc и многих других форматов файлов). Постраничная разбивка также предусмотрена.

Время выполнения измерено на ноутбуке, на десктопном железе получается примерно втрое быстрее.

$ ls -lh test.db |awk '{print $5}'
20M

Тестовая база небольшая, но особой роли размер базы не играет, т.к. значительное время занимает загрузка libsqlite+libICU. Собственно, для именно этой утилиты libICU совсем не нужна, так что можно слинковать статически с libsqlite без лишних довесков, в разы ускорив работу утилиты для директорий, содержащих немного файлов. Впрочем, кэширование на стороне клиента все равно эффективнее.

Comments

Anonymous said…
Извините за оффтопик, но возник вопрос. Не знаете ли каким простейшим образом внести с помощью Tcl API blob(фотографию к примеру) в sqlite3 базу? И как потом считать? Искал везде, но так и не нашел простого примера как это можно сделать. Спасибо.

Popular posts from this blog

Открытый софт для научных расчетов

Счетчики в SQLite

Обработка email-сообщений