Одноранговая система поисковых систем
Этот проект является реализацией в качестве библиотеки протокола Камилата. Kamilata позволяет доверять безстороннему поиску в открытых сетях. Эта библиотека может обрабатывать любой тип данных и быть легко интегрированной в ваше приложение Libp2p.
Возможно несколько вариантов использования:
Алгоритм ранжирования зависит от вас, так как эта библиотека предоставит вам только поток неупорядоченных результатов поиска. Основываясь на метаданных, которые вы включаете в эти результаты, вы можете оценить их так, как хотите.
Камилата - первая система в мире, которая предлагает свойства, описанные выше, при этом все еще масштабируемая. Действительно, сеть может включать без проблем более сотни миллионов документов и сотен тысяч узлов. Фактический предел неизвестен.
Эта библиотека способствует поисковой системе Admarus IPFS.
Все начинается с самого наивного подхода, который я оптимизировал до максимума. Представьте себе сеть сверстников, каждый из которых хранит документы (эти документы могут быть воспроизведены на нескольких сверстниках, если они популярны). Когда сверстник хочет искать документ, он отправляет запрос каждому сверстнику в сети. Это перестает работать, когда слишком много сверстников, потому что сеть затоплена запросами.
Чтобы решить это, я добавил алгоритм маршрутизации, который позволяет искателю направлять запросы только для сверстников, которые имеют соответствующие документы. Благодаря этому запросы пропускают всех бесполезных сверстников. Теперь вы можете скачать список соответствующих документов на постоянной скорости независимо от запроса. Скорость поиска зависит от размера сети. Новые результаты получают каждый h Hops, где h = ln(n)/ln(c) с n количество одноранговых и c количество соединений, которые каждый коллега имеет для других. Это очень хорошо, чем для h Beeing более 3, когда c составляет 100, сеть должна иметь более миллиона сверстников. Результаты могут затем быть свободно ранжироваться на основе метаданных, которые они включают.
Алгоритм маршрутизации Камилата основан на аттенуированных фильтрах цветов. Фильтры Bloom - это компактные структуры данных, используемые для определения того, присутствует ли элемент в наборе. Здесь мы проверяем наличие слов в документах. С точки зрения узла, сеть камилата разделена на группы виртуальных узлов различных размеров. Это делит корпус на несколько подходов от нескольких документов до всех документов корпуса. Каждый из них имеет соответствующий фильтр цветов, тогда легко найти слова в сети и знать, какие узлы запрашивают для данных слов.