J'ai environ 500 millions d'entiers de 128 bits, ajoutant environ 100M par an. Rien n'est jamais effacé. Les chiffres sont distribués uniformément, à l'échelle et dans le temps.Structure sur disque pour stocker un grand nombre d'entiers 128 bits?
Fondamentalement, tout ce dont j'ai besoin est une opération d'ajout qui retourne également si le numéro existe déjà dans le DB. De plus, je ne veux pas utiliser trop de RAM pour ce système, donc stocker tout en mémoire n'est pas ce que je cherche.
Jusqu'à présent, nous utilisions plusieurs tables MyISAM sur MySQL, en utilisant deux bigints comme clé primaire. Cela nous donne une bonne performance, mais je suppose que ce n'est pas le bon outil pour ce travail. Nous avons eu quelques problèmes de performance avant de diviser les tables, et nous avons eu des corruptions sur les pannes de courant. En outre, une base de données nous donne beaucoup plus de fonctionnalités dont nous n'avons pas besoin. J'utilise Python sous Linux, mais je suis ouvert aux suggestions.
Similar question in C++. MISE À JOUR: Le commentaire de Marcelo mentionne Bloom Filter, ce qui me semble très prometteur. Puisque je travaille avec des hachages, j'ai déjà renoncé à une précision complète, donc cela pourrait être un grand compromis précision/performance.
Que pouvez-vous nous dire sur la distribution des numéros? A propos des ajouts chaque année? –
Il (devrait être) uniforme, les chiffres sont des hachages. Rythme régulier, donc environ 3 ajouter des opérations par seconde. – itsadok