Использовать хеширование с учетом локальности для динамического набора данных

Я использую LSH для записей базы данных, и тем самым я создаю индекс (не индекс базы данных, простую хэш-карту), где подобные записи блокируются в одном и том же сегменте. База данных может содержать несколько миллионов записей. Мой вопрос касается дизайна, который я публикую ниже.

введите описание изображения здесь

Сначала я создам индекс, используя доступную базу данных, выполнив LSH. Но когда новая запись вставляется в базу данных, я должен индексировать эту запись также в индекс. Как я могу сделать это с помощью LSH? Может ли LSH выделить эту запись в корзину, в которой есть похожие записи? Поддерживает ли LSH обновления в наборе данных?

1 ответ

Решение

Я бы использовал E2LSH (который разработан Andoni, который является отличным парнем), который написан на C++. На сайте проекта упоминается:

Новейшие (не совсем) алгоритмы LSH (2014): эти алгоритмы достигают производительности лучше, чем классические алгоритмы LSH, используя хеширование, зависящее от данных. Они улучшают классические алгоритмы LSH как для пространства Хэмминга, так и для евклидова пространства. Однако эти алгоритмы не являются динамическими, в отличие от классических алгоритмов LSH, которые используют независимое от данных хеширование и, следовательно, допускают обновления набора точек.

Если вы не хотите использовать библиотеку, но по какой-то причине хотите разработать свою собственную, я бы посоветовал вам сначала изучить руководство.

Другие вопросы по тегам