База данных идентификации это простой
текстовый файл, в котором хранится информация о ранее идентифицированных
файлах. Формат данного текстового файла следующий:
// CRC32-контрольная сумма файла
документа длиной 11 символов ; размер файла документа в байтах длиной 12
символов ; имя документа до конца строки.
Пример:
04227227224;000006445232;ИСКУССТВО
ПРОГРАММИРОВАНИЯ. КНУТ
04235570299;000003018508;СИСТЕМНЫЙ
АДМИНИСТРАТОР
04273634548;000004054888;ADVANCED
SIGNAL PROCESSING HANDBOOK
CRC32 и длина файла хранятся в
символьном виде и слева до своего размера заполняются символом 0.
Расширение
файла Базы идентификации *.TXT . Как
видно, для нахождения названия файла мы используем связку:
"контрольная сумма+длина файла". Это самый простой вариант идентификации,
т.к. реализация функции вычисления контрольной суммы существует
практически для всех сред программирования и в некоторых
операционных системах доступна через API. Если
бы, разработчики популярных средств прослушивания спутникового потока
(Skynet,
Skygraber, BetaSky, DataSky, Manna, MaCsKy и др.)
захотели бы, они с легкостью могли бы добавить туда функцию
идентификации файлов, которая использовала бы базу идентификации. Моя
программа, которая использует данный формат базы идентификации называется
FindNameDocs . Шло время, и с
приобщением к пиринговой сети местного телекома, мне на глаза
попались фрагменты "Коллекции технической литературы". Оказывается в МГУ
при поддержке попечительского совета, идет очень важная работа по сбору и
систематизации электронной библиотеки технической литературы. Однако,
из-за проблем с копирайтом в настоящее время данная библиотека из Сети не
доступна, что не мешает найти ее в пиринговых сетях.
Размер этой библиотеки примерно 100 ГБайт на 2006г. К этой библиотеке
прилагается файл HTMLs.rar (размером около 8
МБайт), в котором мы можем найти файлы описывающие каждую из 16000 книг.
Из этих файлов легко извлекаются: название книги, ее автор(ы),
размер файла книги и хэш файла книги. Хэш в
варианте клиента "ОСЛА". Т. к. у меня нет полного варианта этой
библиотеки, то и создать базу идентификации с использованием контрольной
суммы я не могу. Однако, использовать для сортировки информацию о
16000 книг, статей и журналов очень хочется. Пришлось написать вариант
FindNameDocs где в место контрольной
суммы используется хэш Ослика. Этот вариант называется
ED2K_FindDocs ,
файлы базы идентификации имеют расширение "*.hED2K". Для вычисления хеша
по алгоритму клиента ED2K программа использует другую программу:
ed2k_hash.exe . (Решение вынужденное и надеюсь временное). Рассмотрим
фрагмент базы идентификации с хешами ослика:
df6fb217c94a96008ddc052af0d5ffcd;000004681823;Аронин Г.С. Практическая
аэродинамика учебник для летного состава
3da24380ec8459df6a5a5b2c8358efb2;000003854447;Айсберг Е. Радио .. Это
очень просто
bee00d2651f5eaffa45bd95a68be76b1;000004305935;Атлури С.Н. ред.
Вычислительные методы в механике разрушения
Очевидно что, отличие от
прежней базы идентификации минимальны. Возможно в будущем я объединю эти
базы в один файл и расширю поддержку типов хэшей. В общем случае, плодить
варианты базы идентификации это очень, очень плохая практика. Сейчас я
думаю над грамотным использованием той информации о
файлах, которая хранится в пиринговых сетях. Самый простой способ,
это написать программу, которая в режиме реального времени обращается к
серверу пиринговой сети (если такой есть) и запрашивает имя файла по его
размеру и значению хэша. Но, как говорится: "просто не значит хорошо".
Дело в том, что в пиринговых сетях имя файлам дают сами пользователи и
зачастую не самое лучшее. Кроме того, один и тот же файл может иметь
несколько вариантов имен и не факт, что сервер выдаст самое лучшее и
полное имя. А в некоторых пиринговых сетях, вообще нет центрального
сервера и информация о файлах, хранится у каждого пользователя локально.
Чтобы найти что-то, надо запускать процедуру поиска, которая может занять
сутки и более. Некоторые сервера вводят принудительный таймаут между
запросами на поиск имени, приметно от 30 сек. и больше. В общем случае,
лучше скачать сначала файлы с информацией о расшаренных файлах, у всех
"жирных" пользователей, а потом уже из этих файлов создавать "черновую
базу идентификации". Так база идентификации коллекции технической
литературы на 16000 названий книг в упакованном виде занимает 744527
Байт., это значит, что на одну книгу в среднем приходится 47 байт. При
размере библиотека в 100 Гбайт, средний размер книги равен 6.25
Мбайт. Если мы захотим собрать библиотеку размером в 5 ТБайт (800000 книг)
размер файла базы идентификации будет около 36 МБайт, что в общем-то по
нынешним временам сущий пустяк. Ну а пока
FindNameDocs и
ED2K_FindDocs не
слились в единое целое советую их запускать по очереди.
Загрузить...
варианты базы идентификации.