Каталог электронной библиотеки
Nov. 27th, 2009 12:59 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В связи с тем, что lib.rus.ec окончательно скурвился я купил себе 32Гб SD-шку, возникает вопрос о работе с НУ ОЧЕНЬ большим набором электроных книг.
И да, primary target platform - maemo.
Т.е. возникает задача хранения каталога библиотеки отдельно от самой библиотеки, периодической актуализации и т.д.
Основная операция с этим каталогом - найти некоторое множество книг и вытащить его в "рабочий набор", то есть в случае maemo в рабочий каталог FBReader-а, владельцы всяких lbook-ов и openinkpot-ов лучше знают, что у них там.
phd тут рекламировал MyRuLib. Мне не понравилось. Во-первых, оно требует свежего wxWidgets. Более свежего чем в lenny (хотя пакет якобы для Debian 5.0 на сайте есть), так что даже на десктопе попробовать не получилось.
Во-вторых, в maemo вообще с wxWidgets туго.
В третьих, залез я в их базу данных посредством sqlite и показалось мне что проектировал её типичный php-кодер. Поле genres в таблице books, содержащее конкатенацию каких-то кодов...
Вот и думаю теперь что делать. Либо пытаться все же использовать эту заботливо подготовленную неграмотными людьми базу, либо писать свою извлекалку метаинформации из fb2 (pdf и djvu меня интересуют меньше, потому что на 32Гб флэшку они не влезут и читать их на экране 800x480 неудобно).
Либо вообще прикрутить sqlite-каталог к FBReader-у.
Но вот как должен выглядеть интерфейс этого библиотечного приложения?
Очевидно что просмотр списка из десятков тысяч авторов - не вариант. Тем более что нужен поиск по сериалам (sequence) или названиям.
Столь же очевидно, что о полнотекстовом поиске сразу надо забыть. Сделать полнотекстовый индекс существенно меньший по объему, чем сама библиотека вряд ли удастся, а библиотека занимает более половины доступного объема.
Ничего лучшего, чем повторить форму поиска на сайте lib.rus.ec мне в голову пока не приходит
И да, primary target platform - maemo.
Т.е. возникает задача хранения каталога библиотеки отдельно от самой библиотеки, периодической актуализации и т.д.
Основная операция с этим каталогом - найти некоторое множество книг и вытащить его в "рабочий набор", то есть в случае maemo в рабочий каталог FBReader-а, владельцы всяких lbook-ов и openinkpot-ов лучше знают, что у них там.
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Во-вторых, в maemo вообще с wxWidgets туго.
В третьих, залез я в их базу данных посредством sqlite и показалось мне что проектировал её типичный php-кодер. Поле genres в таблице books, содержащее конкатенацию каких-то кодов...
Вот и думаю теперь что делать. Либо пытаться все же использовать эту заботливо подготовленную неграмотными людьми базу, либо писать свою извлекалку метаинформации из fb2 (pdf и djvu меня интересуют меньше, потому что на 32Гб флэшку они не влезут и читать их на экране 800x480 неудобно).
Либо вообще прикрутить sqlite-каталог к FBReader-у.
Но вот как должен выглядеть интерфейс этого библиотечного приложения?
Очевидно что просмотр списка из десятков тысяч авторов - не вариант. Тем более что нужен поиск по сериалам (sequence) или названиям.
Столь же очевидно, что о полнотекстовом поиске сразу надо забыть. Сделать полнотекстовый индекс существенно меньший по объему, чем сама библиотека вряд ли удастся, а библиотека занимает более половины доступного объема.
Ничего лучшего, чем повторить форму поиска на сайте lib.rus.ec мне в голову пока не приходит
no subject
Date: 2009-11-26 10:04 pm (UTC)По поводу интерфейса - с очевидностью, нужна рубрикация и поиск по автору, названию, жанру.
no subject
Date: 2009-11-26 10:09 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:почитал комменты на либрусеке
Date: 2009-11-26 10:32 pm (UTC)Похоже на проворкацию, вброс. Не торопиться с выводами, имхо.
Re: почитал комменты на либрусеке
Date: 2009-11-26 10:34 pm (UTC)Re: почитал комменты на либрусеке
From:Re: почитал комменты на либрусеке
From:Re: почитал комменты на либрусеке
From:Re: почитал комменты на либрусеке
From:Re: почитал комменты на либрусеке
From:Re: почитал комменты на либрусеке
From:Re: почитал комменты на либрусеке
From:Re: почитал комменты на либрусеке
From:Re: почитал комменты на либрусеке
From:no subject
Date: 2009-11-26 10:39 pm (UTC)Шучу, шучу.
no subject
Date: 2009-11-27 07:44 am (UTC)no subject
Date: 2009-11-26 10:52 pm (UTC)no subject
Date: 2009-11-27 04:13 am (UTC)no subject
Date: 2009-11-26 10:52 pm (UTC)no subject
Date: 2009-11-27 05:58 am (UTC)Могу предложить Пургуру (с)
Date: 2009-11-26 10:54 pm (UTC)дисклэймер!
Date: 2009-11-26 10:57 pm (UTC)б) проект заморожен
в) разрабатывалось под "тыканье пальцем"
Re: Могу предложить Пургуру (с)
From:Re: Могу предложить Пургуру (с)
From:Re: Могу предложить Пургуру (с)
From:Re: Могу предложить Пургуру (с)
From:Re: Могу предложить Пургуру (с)
From:Re: Могу предложить Пургуру (с)
From:Вы про интерфейс?!
From:Re: Вы про интерфейс?!
From:за всю жизнь человек может прочитать 20 000 книг.
From:Re: за всю жизнь человек может прочитать 20 000 книг.
From:это редкие запросы.
From:Re: Вы про интерфейс?!
From:no subject
Date: 2009-11-26 10:55 pm (UTC)no subject
Date: 2009-11-27 02:42 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-11-26 11:08 pm (UTC)no subject
Date: 2009-11-27 04:58 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2009-11-26 11:21 pm (UTC)Полнотекстовый индекс нужен по полям с метаинформацией, полнотекстовый по книге практически бесполезен.
no subject
Date: 2009-11-27 04:19 am (UTC)Я пробовал работать таким образом с архивами альдебарана (которые на порядок меньше) и на десктопе, Пришел к выводу, что без БД тут никак.
(no subject)
From:no subject
Date: 2009-11-26 11:22 pm (UTC)no subject
Date: 2009-11-27 09:34 am (UTC)Еще интересно подумать над ассоциативным поиском по названию. В смысле искать по названиям, где перепутан порядок слов, какие-то слова запомнились не тем синонимом etc.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-11-26 11:31 pm (UTC)http://code.google.com/p/cutebookshelf/source/browse/trunk/parsers.py
Ostal'naya chast' proekta ne rasschitana osobo na polnuyu biblioteku Lib.rus.ec.
no subject
Date: 2009-11-27 04:21 am (UTC)Сложнее придумать правильную структуру для складывания этой информации в БД, причем судя по объему и требованиям к памяти, тут нужна именно БД, например sqlite3 и ПРАВИЛЬНЫЙ ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ.
(no subject)
From:(no subject)
From:(no subject)
From:файловая система fuse для архива книг
Date: 2009-11-26 11:51 pm (UTC)Решать нужно три задачи: сохранение и распространение имеющихся книг, организация удобного произвольного доступа к файлам отдельных книг и развитие и пополнение архива. С последней задачей либрусек пока ещё вроде справляется, поэтому наиболее насущны первые две.
1) Распространение. Эффективно — весь архив полностью торрентом (http://torrent.rus.ec/viewforum.php?f=186), но так неудобно для поиска и для получения отдельной книги. Удобно для чтения — находить по автору, жанру, названию — и скачивать по одной или несколько книг. Однако любой централизованный сайт будет или подавлен, или закрыт, или подкуплен (что и наблюдаем). В принципе, массовое пофайловое распространение возможно в P2P, оно децентрализованно, и может быть при желании и анонимным. Однако для P2P важно обеспечить одинаковые и описателные названия файлов и/или извлечение метаданных.
2) Организация произвольного доступа к файлам книг. Пока P2P не станет работающим и массовым вариантом, нужно работать локально с полным архивом. В большинстве случаев мне лично нужно найти искомого автора и затем уже выбрать из списка его книг. Реже — искать по названию или части названия. Предполагаю доступности полного архива (который в торрентах). В целях минимизации места на диске и удобства, желательно, чтобы программа доступа к книге умела работать с архивом именно в том виде, в котором он раздаётся в торрентах.
В связи с этим, меня привлекает следующее решение: user-space файловая система fuse, которая индексирует набор zip-архивов с fb2 и другими файлами внутри (а именно так распространяется архив). Пусть программа-индексатор извлекает из всех fb2 только метаданные. Используя эти метаданные, файловая система может представить архив в естественном библиографически упорядоченном виде. Для пользователя это будет выглядеть как иерархия каталогов, вроде такой:
/author/первая буква фамилии/фамилия и остальные имена, включая других авторов/название произведения/файлы
/genre/название жанра/author/первая буква фамилии/...
/genre/название жанра/title/первая буква названия/название/автор/файлы
/year/19xx/1950/author/...
Файлы при этом должны быть названы описательно, примерно так:
«Фамилия Имя Отчество. Название (Год) Издание.fb2»
При этом:
* для поиска отдельной книги в большинстве случаев хватит обычных средств работы с файлами (файлового менеджера или командной оболочки)
* основные пути поиска книги будут соответствовать вложенности каталогов
* возможны ортогональные иерархии, и по жанру, и по году, и по ISBN, и вообще по чему угодно; раз индекс метаданных уже раз собран
* ничего с самим архивом (85 ГБ на сегодня) делать не надо, его можно хранить и раздавать как есть, то есть массовое распространение библиотеки будет оставаться эффективным, сидов будет больше
* размер индекса, полагаю, будет невелик, а индекс будет меняться редко (старые zip-файлы не меняются, только добавляются новые)
* представление библиотеки в виде файловой системы никак не ограничивает ни выбор читалки, ни выбор полнотекстовых индексаторов (ежели кому-то они всё же понадобятся)
* представление всей библиотеки с библиографически организованной структурой каталогов и описательными названиями файлов, позволит людям легко выкладывать архив как в веб, так и в P2P (ну и вообще будет способствовать частичному, то есть удобному, человечному распространению книг) — и при этом можно раздавать и обновлять архив через торрент.
Мне кажется вариант почти идеальным. Если даже всего несколько десятков или сотен гиков откроют такую виртуальную ФС с библиотекой в P2P, почти любая книга будет легко находиться и быстро скачиваться вообще без централизованной библиотеки. При этом книги будут доступны не только гикам, но и вполне обыкновенным пользователям. За DDOSить такую систему распространения будет трудно. И всех читателей не подкупишь.
FUSE, пишут, есть и для maemo, так что решение может оказаться и вполне мобильным.
Наконец, отмечу, почему мне не нравятся все программы-каталогизаторы (в виндовом стиле), сама идея таких программ. Вместо нормальных полноценных файлов в них можно получить только элементы интерфейса. Это только если на десктопе с экрана читать. Даже взять и скопировать файл на флэшку или карточку памяти в них не всегда возможно.
Re: файловая система fuse для архива книг
Date: 2009-11-27 12:46 am (UTC)Re: файловая система fuse для архива книг
From:да-да, близок локоть:
From:Re: да-да, близок локоть:
From:Re: да-да, близок локоть:
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:Re: файловая система fuse для архива книг
From:В порядке перекрёстной ссылки
From:Re: В порядке перекрёстной ссылки
From:no subject
Date: 2009-11-27 06:52 am (UTC)no subject
Date: 2009-11-27 07:44 am (UTC)При том, что весь этот набор не цельно тяпнутый архив, а плод многолетнего коллекционирования, мне последнее время хочется библиотеку проредить. Есть книжки, которые особой ценности не представляют, вряд ли там написано что-то уникальное, и очень маловероятно, что я когда-то их буду читать. А поиск по книжкам они немного затрудняют -- файлов получается много. Запасаться заранее литературой "на всякий случай" интересное, но не очень практичное занятие.
Отдельный интерес -- "собрать абсолютно все книги". Это может быть интересно, как задача сама по себе. Тогда можно наверное исходить из узкой направленности задачи, спроектировать БД, не иметь в виду все это запихнуть в современную электронную читалку и т.д.
no subject
Date: 2009-11-27 09:46 am (UTC)При нынешних ценах на носители дешевле в смысле затрат времени, иметь копию всего до чего дотянешься, и эффективные средства поиска в этой свалке, чем тратить время на формирование личного среза.
Если под "всяким случаем" мы понимаем достаточно необычные информационные потребности, которые могут возникнуть там, где доступа к сети нет, "запасаться на всякий случай" единственное возможное решение.
no subject
Date: 2009-11-27 08:00 am (UTC)Как тут уже скзали ло меня:
no subject
Date: 2009-11-27 09:50 am (UTC)На самом деле ровно потому, что описанная схема существенно усложняет визуализацию, но нифига не экономит в смысле места. Ыот собственно, у нас индекс в словаре (4 байта, потому что двух мало) число (один байт) и падеж (1байт). 6 байт. Какой процент слов языка короче 6 букв? А с учетом частоты употребления?
Естественный язык, между прочим, весьма близок по своим свойствам к эффективному коду переменной длины. Правда, с учетом большой избыточности, необходимой для надежной передачи устной речи. Но эта избыточность легко отжимается обычным gzip-ом.
Стандарт Fb2, естественно, неоптимален. Но он весьма широко распространен, к нему написаны удобные программы чтения, которые решают задачу собственно использвоания книги. Остается только решить задачу найти нужную книгу по не совсем четко сформированным критериями и передать в читалку.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-11-27 08:21 am (UTC)Мне тоже. Для наладонника весьма удобно.
no subject
Date: 2009-11-27 08:45 am (UTC)В Друпале очень часто поля таблиц используются для сериализации данных, по которым не планируется искать. И тем не менее, популярнейшая CMS. Может, не стоит судить по одному факту? В наше время RDBMS зачастую используется как тупейшее хранилище данных, где главное — простота, а о foreign keys и нормализации никто не вспоминает. Например, у Ruby on Rails такая политика.
no subject
Date: 2009-11-27 08:49 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-11-27 09:10 am (UTC)но проблема быстрого доступа есть, да.
кстати, насчет бэкапа публичных хранилищ - что имеет смысл выкачивать\кравлить? могу потом захостить, если что
no subject
Date: 2009-11-27 09:51 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-11-27 09:13 am (UTC)По моему, идея весьма здравая. Не находите?
FBReader меня весьма радует как читалка, думаю, вы тоже им довольны. Так почему бы не помочь проекту?
Перевести хранилище на sqlite и приделать поиск по нему.
no subject
Date: 2009-11-27 09:55 am (UTC)Да, конечно, ХРАНИЛИЩЕ на sqlite не переводить ни в коем случае. Вот хранилище метаинформации перевести из плоского XML-файла в sqlite - можно. И как-нибудь отучить freader при каждом входе в библиотеку проверять mtime всех файлов.
Впрочем, если в хранилище будут лежать zip-ы с либрусековского торрента, то файлов будет немного.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-11-27 10:36 am (UTC)а про полнотекстовый - сделал для любимых цитаток. потихоньку пополняемый и дополняемый в фоне.
no subject
Date: 2009-11-27 10:41 am (UTC)заметил.
Так что может за месяц стало лушче.
К сожалению, там еще больше ЛОГИЧЕСКИ невалидных файлов. С неправильным разбиением на главы, с невыделенными эпиграфами и стихотоворнцыми цитатами, с полупустой метаинформацией.
(no subject)
From:(no subject)
From:no subject
Date: 2009-11-27 12:46 pm (UTC)Когда ты-таки сформируешь библиотеку, хотелось бы переписать :)
no subject
Date: 2009-11-27 12:50 pm (UTC)(no subject)
From:мои ¢2
Date: 2009-11-27 04:51 pm (UTC)Вдруг какие идеи оттуда пригодятся.
Re: мои ¢2
Date: 2009-11-27 08:37 pm (UTC)А смотреть на решения созданные невменяемыми людьми мне неохота. Их и так на каждом шагу слишком много.
Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:Re: мои ¢2
From:no subject
Date: 2009-11-27 10:30 pm (UTC)no subject
Date: 2009-11-28 09:54 am (UTC)no subject
Date: 2009-11-28 06:59 am (UTC)no subject
Date: 2009-11-28 09:50 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-11-28 04:18 pm (UTC)Файлы не копируются, а делаются жёсткие ссылки, поэтому места дерево почти не занимает. Если у текста несколько авторов, то создаётся каталог и мягкие ссылки с каталогов отдельных авторов. Дерево на 7,5 тыс. файлов строится секунд за 13 (не считая сканирования ФС).
Теперь вот думаю, что следует разделить задачу. Отдельно сбор метаинформации (простая база: имя файла — метаинформация) и отдельно построение дерева. Тогда построение ещё быстрее будет. Да и простые запросы делать можно будет.