Um sistema de mecanismo de pesquisa ponto a ponto
Este projeto é uma implementação como uma biblioteca do Protocolo Kamilata. Kamilata permite pesquisas sem confiança em redes abertas. Esta biblioteca pode lidar com qualquer tipo de dados e ser facilmente integrado ao seu aplicativo LIBP2P.
Vários casos de uso são possíveis:
O algoritmo de classificação depende de você, pois esta biblioteca fornecerá apenas um fluxo de resultados de pesquisa não ordenados. Com base nos metadados que você inclui nesses resultados, você pode classificá -los como desejar.
Kamilata é o primeiro sistema do mundo a oferecer as propriedades descritas acima, enquanto ainda é escalável. De fato, a rede pode incluir sem problemas mais de centenas de milhões de documentos e centenas de milhares de nós. O limite real é desconhecido.
Esta biblioteca alimenta o mecanismo de pesquisa da ADMARUS IPFS.
Tudo começa com a abordagem mais ingênua, que otimizei ao máximo. Imagine uma rede de colegas de armazenamento de documentos (esses documentos podem ser replicados em vários pares se forem populares). Quando um colega deseja procurar um documento, ele envia uma consulta para todos os colegas da rede. Isso para de funcionar quando há muitos colegas, porque a rede é inundada com consultas.
Para resolver isso, adicionei um algoritmo de roteamento que permite ao pesquisador rotear consultas apenas para os pares que possuem documentos correspondentes. Graças a isso, as consultas ignoram todos os colegas inúteis. Agora, você pode baixar uma lista de documentos correspondentes em velocidade constante, independentemente da consulta. A velocidade de pesquisa depende do tamanho da rede. Novos resultados são recebidos a todos os lúpulos h , onde h = ln(n)/ln(c) com n o número de pares e c o número de conexões que cada par tem com outras pessoas. Isso é muito bom quanto para h Beeing mais de 3 quando c é 100, a rede precisa ter mais de um milhão de colegas. Os resultados podem ser classificados livremente com base nos metadados que eles incluem.
O algoritmo de roteamento de Kamilata é baseado em filtros atenuados de Bloom. Os filtros Bloom são estruturas de dados compactas usadas para determinar se um elemento está presente em um conjunto. Aqui, verificamos a presença de palavras em documentos. Do ponto de vista de um nó, uma rede Kamilata é dividida em grupos de nós virtuais de tamanhos variados. Isso divide o corpus em vários conjuntos que variam de alguns documentos a todos os documentos do corpus. Cada um com seu filtro de Bloom correspondente, é fácil localizar palavras na rede e saber quais nós consultarem determinadas palavras.