|
|
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
я близок к нулю в проектировании и работе с БД (нет, конечно как создавать таблицы и писать sql-запросы я выучил, но не более того), а ситуация такая: имеется необходимость хранения 64-битного перцептивного хэша (использую для сравнения изображений); суть перцептивного хэша (и в этом-то для меня вся проблема работы с ним в БД) заключается в том, что по нему можно не только сказать что сравниваемые изображения возможно идентичны или не идентичны (то есть да или нет), а и уточнить с какой степенью вероятности; из выше написанного возникает необходимость запроса который бы выбрал из таблицы все записи у которых 64-битное значение совпадает с искомым не обязательно по всем 64-м разрядам, а может например по 50-ти, 45-ти (некоторое пороговое значение (заранее определенное)). В поисковике ничего не нашел (наверное, просто пока не знаю что ищу). Буду рад если вы мне поможете ссылками на соответствующие ресурсы, форумы, статьи и пр. Как выгоднее хранить эти 64 бита и как производить поиск по ним как описано выше ? (записей не более 500 000) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 22:05 |
|
||
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
XMalonКак выгоднее хранить эти 64 бита и как производить поиск по ним как описано выше ? (записей не более 500 000) Разбить биты на отдельные записи. Потом группировка изображений с совпадающими битами и фильтрация по HAVING COUNT(*)>40. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 22:15 |
|
||
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovРазбить биты на отдельные записи. Потом группировка изображений с совпадающими битами и фильтрация по HAVING COUNT(*)>40. ну я так понимаю, раз уж мы группируем все таки изображения, значит having count (*)>40 будет проверять количество изображений, а не записей с битами. и что это за условие "с совпадающими битами" (что имелось ввиду ? - полное совпадение чтоли ?). В общем не понятно, уже пол часа пытаюсь понять Вашу мысль, но не доходит, все равно спасибо ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 23:02 |
|
||
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
Ну, например, для некоего образца у вас получилось значение хэша 13. Пусть оно четырёхбитное. Тогда в таблицу добавляется четыре записи с значениями (1, -2, 3, 4). Здесь положительные числа - бит установлен, отрицательные - сброшен. Далее у вас есть для проверки изображение с хэшем 12. Его набор битов, соответственно (-1, -2, 3, 4). Делается запрос Код: sql 1. 2. 3. Для вышеприведённого образца этот запрос вернёт 3, т.е. в заданном хэше с данным образцом совпадают три бита. HAVING позволит ограничивать выборку нужным числом совпадающих бит. Это, конечно, только исходя из предположения, что все биты хэша имеют равный вес... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 23:31 |
|
||
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
XMalonКак выгоднее хранить эти 64 бита и как производить поиск по ним как описано выше ? (записей не более 500 000) Мне кажется, самый простой и эффективный способ хранения такого хэша - отдельное поле с типом данных "большое целое" (64 бита). Исходим из того, что условие фильтра "одинаковости" для выборки - общее количество совпадающих бит между хэшем каждой записи записи и хэшем, который ищем, должно быть больше определенного значения. Не долго думая (или совсем не думая) алгоритм вычисления значения "в общем виде" примерно такой: 1) битовое исключающее ИЛИ между значением поля таблицы и значением хэша, которое нужно найти - во всех несовпадающих битах будет установлена 1. 2) для полученного результата подсчитывается количество установленных бит (т.е. несовпадений). 3) получить на основе этого значения количество совпадений (64 минус количество несовпадений). Запрос на SQL может выглядеть примерно так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Можно обернуть подсчет количества установленных битов в функцию... Жесть, конечно, но где-то так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 23:39 |
|
||
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
sphinx_mvЖесть, конечно Мой вариант хоть и заставит распухнуть базу, но хоть индекс использовать может... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 23:45 |
|
||
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
всем огромное спасибо, особенно Dimitry Sibiryakov, решение супер, с учетом всех требований, я бы сам до него не додумался, простой запрос, а вся необходимая информация как на ладони )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2012, 00:10 |
|
||
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, в моем случае главное скорость. с объемом дискового пространства проблем никаких, да и тем более изображений не так много (не более 500 000), еще раз спс ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2012, 00:13 |
|
||
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovsphinx_mvЖесть, конечно Мой вариант хоть и заставит распухнуть базу, но хоть индекс использовать может... ...А может и не использовать... Эффективность индексов - величина не абсолютная. К тому же выполнять многократные запросы к серверу рано или поздно приведет к проблемам с производительностью. К тому же, я бы сказал, что SQL для непосредственного решения подобной задачи не очень хороший инструмент. Проще (и, наверное, правильнее) выгрузить на клиента массив из "ID" и "HASH" (для заявленного количества записей получается всего каких-то жалких 8 мегабайт объема данных) и манипулировать ими любым желаемым способом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2012, 00:28 |
|
||
|
хранение и обработка перцептивного хэша в БД
|
|||
|---|---|---|---|
|
#18+
Есть замечательные инструменты в SQL это внешние функции и внешние агрегирующие функции (программируются на C#) - в них можно реализовать необходимую логику изапросы будут красивыми и структура базы данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2012, 10:33 |
|
||
|
|

start [/forum/topic.php?fid=32&gotonew=1&tid=1541739]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
7ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 433ms |

| 0 / 0 |
