J'ai une piscine (avec la taille de la piscine N), avec tous les ensembles qui ne correspondent pas à la RAM. Je ne peux qu'elles ne correspondent qu'une petite fraction, disons 1 à 5% de tous les ensembles dans la RAM. p>
Le problème est donné que le jeu de requêtes q Je dois retourner des kings k avec plus grande cardinalité de l'intersection avec Q. P>
K est petit, en centaines, tandis que n dans des centaines de millions. Nombre total d'éléments de district dans tous les ensembles de centaines de millions, également. p>
J'ai fait des expériences représentant des ensembles comme filtres de fleurs. Étant donné que la taille des ensembles varie considérablement, je dois utiliser de très gros bloombsfilters, ce qui est inefficace (BloomFiltes prend 5x espace de jeu de données originaux). Bloomfiters adaptatifs de https://github.com/jaybaird/python-bloomfilter produire seulement 3-5x Compression de l'ensemble de données, c'est donc toujours presque infaisable. p>
4 Réponses :
Si vous conservez le jeu de requêtes Q en mémoire comme une table de hachage, il n'est pas nécessaire de garder tous les autres ensembles en mémoire en même temps. Vous pouvez calculer les cardinalités d'intersection pour chaque ensemble l'une après l'autre. Il suffit de charger un ensemble dans la mémoire, calculez la cardinalité de son intersection avec q, puis retirez-la à nouveau de la mémoire. P>
Enregistrez tous les ensembles ensemble dans un filtre de floraison contenant des touches du formulaire Deuxièmement, vous pouvez accepter de très gros taux d'erreur, ce qui permet à nouveau au filtre de floraison. Un filtre de floraison avec un taux d'erreur de 1% nécessite 9.58505837736744 ... bits par élément. Un filtre de floraison avec un taux d'erreur de 10% nécessite 4.79252918868372 bits par élément. Mais si vous avez un taux d'erreur de 10%, sur un jeu de 400 éléments, vous pouvez, après avoir corrigé les faux positifs attendus, avez une réponse à 95% du temps dans les 3% de la bonne réponse. Cela peut être acceptable d'obtenir le facteur de 2 réduction de la taille du filtre. (Le plus grand Q est, plus l'erreur relative est petite.) P>
Si entre ces deux techniques, un filtre de floraison est toujours trop gros, vous devriez peut-être examiner la distribution de vos données sur plusieurs machines ... p> (SETID, valeur) code>. Cela devra être capable de gérer un ensemble de la taille de l'union de tous vos ensembles, ce qui vous permet de stocker de petits ensembles dans des filtres de fleurs dimensionnés pour les très grands. P>
En fait, j'ai trouvé la solution. L'intersection de la multiplication d'hyperloglog et de minouhsh, et les ministères pourraient être nettoyés d'efficacité avec LSH. Plus de détails ici: http://infolab.stanford.edu/%7euLLman/mmds/ch3 .pdf p>
Le document lié ne contient rien d'hyperloglog. Pouvez-vous expliquer ce que vous entendez en multipliant HLL avec Minhash? Vous voulez dire simplement multiplier les cardinalités estimées des deux ensembles? Pouvez-vous créer un lien vers un document qui indique que cela fera ce que vous voulez?
Est-ce que "tous les ensembles ne correspondant pas dans la RAM" signifie que a) Aucun i> des ensembles correspond à la RAM, ou B> B) la combinaison de tous i> Les ensembles ne correspondent pas à la RAM?
Cela signifie b). Je peux tenir environ 1% de tous les ensembles dans la RAM.