Страница 1 из 1

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

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

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

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