Ce projet est un portage .Net (avec modifications) de https://github.com/rs/xid par Olivier Poitrey. Des parties importantes du code et de ce fichier Lisez-moi sont basées sur ce projet.
Xid.Net est une bibliothèque génératrice d'identifiants unique au monde, prête à être utilisée en toute sécurité et directement dans votre code. Il fournit une interface similaire à System.Guid mais génère des identifiants plus petits (12 octets contre 16 au format brut, 20 contre 36 lorsqu'il est converti en chaîne). La génération de Xids est plus rapide que celle de Guids, souvent de manière significative.
Xid utilise l'algorithme Mongo Object ID pour générer des identifiants uniques au monde avec une sérialisation différente (base32 vs base64) afin de les rendre plus courts lorsqu'ils sont transportés sous forme de chaîne : https://docs.mongodb.org/manual/reference/object-id/.
PM > Install-Package Yort.Xid.Net
Créer un Xid ;
var id = Xid . NewXid ( ) ;
Conversion de Xid en chaîne ;
var id = Xid . NewXid ( ) ;
var idString = id . ToString ( ) ;
Conversion d'une chaîne en Xid (méthode TryParse également fournie) ;
var idString = " 9m4e2mr0ui3e8a215n4g " ;
var id = Xid . Parse ( idString ) ;
Conversion de Xid en un tableau d'octets ;
var id = Xid . NewXid ( ) ;
var bytes = id . ToBytes ( ) ;
ou
var id = Xid . NewXid ( ) ;
var preallocatedByteArray = new byte [ 12 ] ;
var bytes = id . ToBytes ( preallocatedByteArray ) ;
Obtenir les composants d'un Xid ;
var xid = Xid . NewXid ( ) ;
DateTime timestamp = xid . GetTimeStamp ( ) ;
byte [ ] machineId = xid . GetMachineId ( ) ;
UInt16 processId = xid . GetProcessId ( ) ;
int counter = xid . GetCounter ( ) ;
Également pris en charge/autres fonctionnalités de l'implémentation .Net ;
Le format d'un Xid est :
La représentation binaire de l'identifiant est compatible avec les identifiants d'objet Mongo de 12 octets. La représentation sous forme de chaîne utilise l'hexadécimal base32 (sans remplissage) pour une meilleure efficacité spatiale lorsqu'elle est stockée sous cette forme (20 octets). La variante hexadécimale de base32 est utilisée pour conserver la propriété triable de l'identifiant.
Xid n'utilise pas base64 car le respect de la casse et les 2 caractères non alphanumériques peuvent poser problème lorsqu'ils sont transportés sous forme de chaîne entre différents systèmes. Base36 n'a pas été utilisé car il n'est pas standard, la taille résultante n'est pas prévisible (pas alignée sur les bits) et elle ne resterait pas triable. Pour valider un xid base32, attendez-vous à une séquence de 20 caractères, entièrement en minuscules, utilisant des caractères compris entre a et v et 0 à 9 nombres ([0-9a-v]{20}).
Les UUID comportent 16 octets (128 bits) et 36 caractères sous forme de représentation sous forme de chaîne. Les identifiants Twitter Snowflake font 8 octets (64 bits) mais nécessitent une configuration de machine/centre de données et/ou des serveurs générateurs centraux. Xid se situe entre 12 octets (96 bits) avec une représentation de chaîne plus compacte et sécurisée pour les URL (20 caractères). Aucune configuration ni serveur générateur central n'est requis, il peut donc être utilisé directement dans le code de l'application.
Nom | Taille binaire | Taille de la chaîne | Caractéristiques |
---|---|---|---|
UUID | 16 octets | 36 caractères | configuration libre, non triable |
identifiant court | 16 octets | 22 caractères | configuration libre, non triable |
Flocon de neige | 8 octets | jusqu'à 20 caractères | nécessite une configuration machine/DC, nécessite un serveur central, triable |
MongoID | 12 octets | 24 caractères | configuration libre, triable |
xid | 12 octets | 20 caractères | configuration libre, triable |
32 bits
BenchmarkDotNet=v0.10.9, système d'exploitation=Windows 10 Redstone 2 (10.0.15063)
Processeur = processeur Intel Core i7-6820HQ 2,70 GHz (Skylake), nombre de processeurs = 8
Fréquence=2648436 Hz, Résolution=377,5813 ns, Minuterie=TSC
[Hôte] : .NET Framework 4.7 (CLR 4.0.30319.42000), 32 bits LegacyJIT-v4.7.2101.1
DefaultJob : .NET Framework 4.7 (CLR 4.0.30319.42000), 32 bits LegacyJIT-v4.7.2101.1
Méthode | Signifier | Erreur | Développement standard |
---|---|---|---|
CréerXidBenchmark | 36,94 ns | 0,2248 ns | 0,2103 ns |
CreateGuidBenchmark | 201,27 ns | 6,9994 ns | 6,5473ns |
64 bits
BenchmarkDotNet=v0.10.9, système d'exploitation=Windows 10 Redstone 2 (10.0.15063)
Processeur = processeur Intel Core i7-6820HQ 2,70 GHz (Skylake), nombre de processeurs = 8
Fréquence=2648436 Hz, Résolution=377,5813 ns, Minuterie=TSC
[Hôte] : .NET Framework 4.7 (CLR 4.0.30319.42000), RyuJIT-v4.7.2101.1 64 bits
Travail par défaut : .NET Framework 4.7 (CLR 4.0.30319.42000), RyuJIT-v4.7.2101.1 64 bits
Méthode | Signifier | Erreur | Développement standard |
---|---|---|---|
CréerXidBenchmark | 23,56 ns | 0,1409 ns | 0,1100 ns |
CreateGuidBenchmark | 82,41 ns | 0,2656 ns | 0,2354 ns |
Tout le code source est sous licence MIT. Licence de dépôt Xid originale sur ; Licence Xid.