Je dois stocker des millions d'entrées dans une base de données. Chaque entrée est identifiée par un ensemble d'identifiants entiers uniques. Par exemple, une valeur peut être identifiée par un ensemble de 10 identificateurs d'entiers, dont chacun est inférieur à 100 millions.Conditionnement de plusieurs entiers liés en un grand entier simple
Afin de réduire la taille de la base de données, j'ai pensé au codage suivant en utilisant une seule valeur entière de 32 bits.
Identifier 1: 0 - 100,000,000 Identifier 2: 100,000,001 - 200,000,000 . . . Identifier 10: 900,000,001 - 1,000,000,000
J'utilise Java. Je peux écrire une méthode simple pour encoder/décoder. Le code utilisateur n'a pas besoin de savoir que je suis en train d'encoder/décoder pendant l'extraction/le stockage. Ce que je veux savoir est: quel est le moyen le plus efficace (le plus rapide) et recommandé pour implémenter un tel encodage/décodage. Une implémentation simple effectuera un grand nombre de multiplications/soustractions.
Est-il possible d'utiliser des décalages (ou des opérations au niveau du bit) et de choisir une taille de partition différente (la taille de chaque segment doit encore être proche de 100 millions)?
Je suis ouvert à toutes suggestions, idées, ou même un régime totalement différent. Je veux exploiter le fait que les identificateurs d'entiers sont limités pour réduire considérablement la taille de stockage sans compromettre sensiblement les performances. Edit: Je voulais juste ajouter que j'ai lu certaines des réponses postées sur ce forum. Une solution courante consistait à diviser les bits pour chaque identifiant. Si j'utilise 2 bits pour chaque identifiant pour un total de 10 identifiants, alors ma gamme d'identifiants devient sévèrement limitée.
vous auriez besoin d'utiliser des puissances de 2 pour vos plages pour que le bit shift fonctionne. – MeBigFatGuy
Pouvez-vous donner un exemple de la façon dont un tel entier codé ressemblerait (ainsi que comment vous décoder manuellement)? Veuillez utiliser des identifiants arbitraires (comme '144,560,000',' 200,0158,945', '399,888,777' etc.) pour votre exemple – Thomas
Notez qu'avec un décalage, vous auriez 3 octets par identifiant seulement (si vous voulez mettre 10 identifiants dans 32 bits). Ainsi, chaque identifiant ne peut avoir que 8 valeurs différentes. – Thomas