Un système de moteur de recherche entre pairs
Ce projet est une implémentation en tant que bibliothèque du protocole Kamilata. Kamilata permet une recherche sans confiance dans les réseaux ouverts. Cette bibliothèque peut gérer tout type de données et être facilement intégrée dans votre application LIBP2P.
Plusieurs cas d'utilisation sont possibles:
L'algorithme de classement dépend de vous, car cette bibliothèque ne vous fournira qu'un flux de résultats de recherche non ordonnés. Sur la base des métadonnées que vous incluez dans ces résultats, vous pouvez les classer comme vous le souhaitez.
Kamilata est le premier système au monde à offrir les propriétés décrites ci-dessus, tout en étant évolutives. En effet, le réseau peut inclure sans problème plus de centaines de millions de documents et des centaines de milliers de nœuds. La limite réelle est inconnue.
Cette bibliothèque alimente le moteur de recherche IPFS ADMARUS.
Tout commence par l'approche la plus naïve, que j'ai optimisée au maximum. Imaginez un réseau de pairs chaque document de stockage (ces documents peuvent être reproduits sur plusieurs pairs s'ils sont populaires). Lorsqu'un pair souhaite rechercher un document, il envoie une requête à chaque pair du réseau. Cela cesse de fonctionner lorsqu'il y a trop de pairs, car le réseau est inondé de requêtes.
Pour résoudre ce problème, j'ai ajouté un algorithme de routage qui permet au chercheur d'acheter des requêtes uniquement aux pairs qui ont des documents assortis. Grâce à cela, les requêtes ignorent tous les pairs inutiles. Maintenant, vous pouvez télécharger une liste de documents correspondants à vitesse constante, quelle que soit la requête. La vitesse de recherche dépend de la taille du réseau. De nouveaux résultats sont reçus chaque houblon h , où h = ln(n)/ln(c) avec n le nombre de pairs et c le nombre de connexions que chaque pair a à d'autres. C'est très bon que pour h être plus de 3 lorsque c est de 100, le réseau doit avoir plus d'un million de pairs. Les résultats peuvent ensuite être classés librement en fonction des métadonnées qu'ils incluent.
L'algorithme de routage Kamilata est basé sur des filtres de floraison atténués. Les filtres Bloom sont des structures de données compactes utilisées pour déterminer si un élément est présent dans un ensemble. Ici, nous vérifions la présence de mots dans des documents. Du point de vue d'un nœud, un réseau Kamilata est divisé en groupes de nœuds virtuels de tailles variables. Cela divise le corpus en plusieurs ensembles allant de quelques documents à tous les documents du corpus. Chacun ayant son filtre de floraison correspondant, il est alors facile de localiser les mots dans le réseau et de savoir quels nœuds interroger pour les mots donnés.