8
votes

Python ID unique le plus court des chaînes

J'ai plus de 100 millions de chaînes uniques (Varcharchar (100) uniques dans la base de données MySQL). Maintenant, j'utilise le code ci-dessous pour créer un hachage unique à partir d'eux (Varcharchar (32) unique) afin de réduire la taille de l'index de la table Innodb (un index unique sur Varcharate (100) est d'environ 3 fois plus grand que sur le champ Varcharchar (32). ).

id = hashlib.md5(str).hexdigest()


2 commentaires

SHA1? Notez que vous pouvez rendre les chaînes plus courtes à l'aide d'une version de base-64 du digest plutôt que d'un hexagonal: base64.b64encode (hashlib.md5 ("FOO"). Digest ())


Vous pouvez utiliser une colonne binaire (16) pour stocker le hachage MD5, sans encodage hexagonal ou base64.


4 Réponses :


2
votes

Un moyen brut peut être, vous pourriez faire du MD5, puis choisissez les 16 premiers caractères, au lieu de tous les 32. Les collisions ne seront toujours pas aussi élevées, et vous aurez une garantie d'unicité raisonnable.


0 commentaires

2
votes

Les solutions les plus simples consistent à convertir des données hexadécimales (yor digests ont une base de 16) à autre chose, par exemple. avec base 64.

Si vous êtes d'accord sur un niveau de risque plus élevé, vous ne pouvez utiliser que par exemple les dix premiers chiffres (hexadécimal) du digest. Il vous donnera 16 ** 10 (plus que 10 ** 12 ) possibilités au lieu de 16 ** 32 (plus que 10 ** 38 ), mais il est toujours énorme et est une technique couramment utilisée (GIT et GitHub utilise généralement 7 chiffres pour identifier les engagements, Afair).


1 commentaires

D'ailleurs. MD5 codé à l'aide de Base64 prend 22 caractères et vous avez la même information qu'avec MD5 cru. Si vous passez de 32 à 22 chattactes vous satisfere, alors cela va bien.



0
votes

Depuis que le hachage et la compression sont très similaires, une solution évidente consiste à utiliser un algorithme de compression pour comprimer vos clés. Cela préservera également le caractère unique des clés.


2 commentaires

Pouvez-vous suggérer un algorithme de compression pouvant atteindre le rapport de compression demandé sur de telles entrées courtes?


Veuillez vérifier Ceci et Chis Posts



10
votes

Vous pouvez l'enregistrer sous forme d'entier: xxx

ou sous forme de chaîne binaire: xxx


0 commentaires