Question

Je dois générer id d'enregistrement unique pour la chaîne unique donnée.

J'ai essayé d'utiliser le format UUID qui semble être bon.

Mais nous pensons que c'est lengthly.

donc nous devons dénudation la chaîne UUID 9f218a38-12cd-5942-b877-80adc0589315 plus petites. En supprimant « - » nous pouvons sauver 4 caractères. Quelle est la partie la plus sûre de retirer de UUID? Nous ne avons pas besoin id unique universel mais nous aimons utiliser UUID comme source, mais réduire les chaînes.

Nous avons besoin d'identifiant unique spécifique au site / base de données (SQL Server / services de données ADO.NET).

Toute idée ou d'un échantillon de toute langue est bien

Merci d'avance

Était-ce utile?

La solution

Pourquoi ne pas simplement au lieu de convertir en une chaîne de base 64? Vous pouvez couper jusqu'à 22 caractères de cette façon.

Enregistrement UUID sous forme de chaîne base64

Autres conseils

Si vous utilisez MS-SQL, vous devriez probablement utiliser le type de uniqueindentifier, il est à la fois compact (16 octets) et depuis le moteur SQL le sait, il peut optimiser les index et les requêtes utilisant.

Un UUID fournit (presque) 128 bits d'unicité. Vous pouvez le raccourcir à 16 octets binaires, ou 22 caractères base64. Je ne recommanderais pas enlever une partie d'un UUID, sinon, il perd tout son sens. UUID ont été conçus de manière à ce que tous les 128 bits ont une signification. Si vous voulez moins que cela, vous devez utiliser un autre schéma.

Par exemple, si vous pouvez garantir que la version 4 seulement UUID sont utilisés, vous pouvez prendre seulement les 32 premiers bits, ou seulement les 32 derniers bits. Vous perdez l'unicité, mais vous avez un nombre assez aléatoires. Il suffit d'éviter les bits qui sont fixés (version et variante).

Mais si vous ne pouvez pas garantir que vous aurez des problèmes réels. Pour la version 1 UUID, les premiers bits ne seront pas uniques pour les UUID générés dans le même jour, et les derniers bits ne seront pas uniques pour les UUID générés dans le même système. Même si vous CRC l'UUID, il n'est pas garanti que vous aurez 16 ou 32 bits d'unicité.

Dans ce cas, il suffit d'utiliser un autre système. Générer un nombre aléatoire de 32 bits en utilisant le nombre aléatoire système générateur et l'utiliser comme identifiant unique. Ne comptez pas sur UUID si vous avez l'intention de stripping sa longueur.

Le UUID est de 128 bits ou de 16 octets. Sans encodage, vous pouvez l'obtenir aussi bas que 16 octets. UUID sont généralement écrits en hexadécimal, ce qui les rend lisibles les chaînes 32 octets. Avec d'autres encodages, vous obtenez des résultats différents:

  1. base 64 tourne 3 à 8 bits en octets de 4 caractères de 6 bits, de sorte que 16 octets de données devient 22 caractères
  2. base 85 tourne 4 octets de 8 bits en 5 caractères 6,4-bit, de sorte que 16 octets de données devient 20 caractères

Tout dépend si vous voulez des chaînes lisibles et comment un codage que vous souhaitez utiliser la norme / commune.

A UUID a 128 bits. Avez-vous envisagé de faire un CRC de celui-ci? Cela pourrait faire descendre facilement à 16 ou 32 bits, et utiliseraient toutes les informations d'origine. Si un CRC est pas assez bon, vous pouvez toujours utiliser les premiers octets d'un hachage approprié (SHA256, par exemple).

Si vous voulez vraiment juste réduire le UUID, le format de celui-ci est décrit dans RFC 4122 . Vous devriez être en mesure de comprendre quelles sont les parties de votre mise en œuvre n'a pas besoin de cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top