хранение и обработка перцептивного хэша в БД

Модераторы: kdv, CyberMax

Ответить
XMalon
Сообщения: 1
Зарегистрирован: 12 апр 2012, 21:30

хранение и обработка перцептивного хэша в БД

Сообщение XMalon » 12 апр 2012, 21:49

я близок к нулю в проектировании и работе с БД (нет, конечно как создавать таблицы и писать sql-запросы я выучил, но не более того), а ситуация такая: имеется необходимость хранения 64-битного перцептивного хэша (использую для сравнения изображений); суть перцептивного хэша (и в этом-то для меня вся проблема работы с ним в БД) заключается в том, что по нему можно не только сказать что сравниваемые изображения возможно идентичны или не идентичны (то есть да или нет), а и уточнить с какой степенью вероятности; из выше написанного возникает необходимость запроса который бы выбрал из таблицы все записи у которых 64-битное значение совпадает с искомым не обязательно по всем 64-м разрядам, а может например по 50-ти, 45-ти (некоторое пороговое значение (заранее определенное)). В поисковике ничего не нашел (наверное, просто пока не знаю что ищу). Буду рад если вы мне поможете ссылками на соответствующие ресурсы, форумы, статьи и пр.
Как выгоднее хранить эти 64 бита и как производить поиск по ним как описано выше ? (записей не более 500 000)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: хранение и обработка перцептивного хэша в БД

Сообщение kdv » 13 апр 2012, 00:18

начну с того, что если речь идет о 64битном числе, то нужно использовать BIGINT (в Firebird. В IB 7 и выше - numeric(18,0)).
Далее, вычислять хэш можно на клиенте, или в udf.
Если udf, то хэш можно вычислять в триггере на вставку записи (считать хэш по blob).
Все остальное является математическими делами, которые не имеют абсолютно никакого отношения к СУБД.
Да, поиск по битам можно делать использованием либо udf, либо встроенных функций типа BIT_AND и т.п.

Ответить