Dieses Projekt ist eine .Net-Portierung (mit Änderungen) von https://github.com/rs/xid von Olivier Poitrey. Wesentliche Teile des Codes und dieser Readme-Datei basieren auf diesem Projekt.
Xid.Net ist eine weltweit einzigartige ID-Generatorbibliothek, die sicher und direkt in Ihrem Code verwendet werden kann. Es bietet eine ähnliche Schnittstelle wie System.Guid, generiert jedoch kleinere IDs (12 Byte vs. 16 im Rohformat, 20 vs. 36 bei Konvertierung in einen String). Das Generieren von Xids ist oft deutlich schneller als das Generieren von Guids.
Xid verwendet den Mongo Object ID-Algorithmus, um global eindeutige IDs mit einer anderen Serialisierung (Base32 vs. Base64) zu generieren, um sie beim Transport als String kürzer zu machen: https://docs.mongodb.org/manual/reference/object-id/.
PM > Install-Package Yort.Xid.NetErstellen einer Xid;
var id = Xid . NewXid ( ) ;Konvertieren von Xid in einen String;
var id = Xid . NewXid ( ) ;
var idString = id . ToString ( ) ;Konvertieren einer Zeichenfolge in eine XID (TryParse-Methode ebenfalls bereitgestellt);
var idString = " 9m4e2mr0ui3e8a215n4g " ;
var id = Xid . Parse ( idString ) ;Konvertieren von Xid in ein Byte-Array;
var id = Xid . NewXid ( ) ;
var bytes = id . ToBytes ( ) ;oder
var id = Xid . NewXid ( ) ;
var preallocatedByteArray = new byte [ 12 ] ;
var bytes = id . ToBytes ( preallocatedByteArray ) ;Komponenten einer Xid abrufen;
var xid = Xid . NewXid ( ) ;
DateTime timestamp = xid . GetTimeStamp ( ) ;
byte [ ] machineId = xid . GetMachineId ( ) ;
UInt16 processId = xid . GetProcessId ( ) ;
int counter = xid . GetCounter ( ) ;Auch unterstützte/andere Funktionen der .Net-Implementierung;
Das Format einer Xid ist;
Die binäre Darstellung der ID ist mit Mongo 12-Byte-Objekt-IDs kompatibel. Die Zeichenfolgendarstellung verwendet Base32-Hex (ohne Auffüllung) für eine bessere Speicherplatzeffizienz, wenn sie in dieser Form (20 Bytes) gespeichert wird. Die Hex-Variante von base32 wird verwendet, um die sortierbare Eigenschaft der ID beizubehalten.
Xid verwendet kein Base64, da die Groß-/Kleinschreibung und die beiden nicht alphanumerischen Zeichen beim Transport als Zeichenfolge zwischen verschiedenen Systemen ein Problem darstellen können. Base36 wurde nicht verwendet, da es kein Standard ist, die resultierende Größe nicht vorhersehbar (nicht bitausgerichtet) ist und nicht sortierbar bleiben würde. Um eine Base32-XID zu validieren, erwarten Sie eine 20 Zeichen lange Sequenz ausschließlich in Kleinbuchstaben mit Zeichen im Bereich von a bis v und 0 bis 9 Zahlen ([0-9a-v]{20}).
UUIDs sind 16 Byte (128 Bit) und 36 Zeichen als Zeichenfolgendarstellung. Twitter Snowflake-IDs sind 8 Byte (64 Bit) lang, erfordern jedoch eine Maschinen-/Rechenzentrumskonfiguration und/oder zentrale Generatorserver. Xid liegt mit 12 Byte (96 Bit) dazwischen und verfügt über eine kompaktere URL-sichere Zeichenfolgendarstellung (20 Zeichen). Es ist keine Konfiguration oder ein zentraler Generatorserver erforderlich, sodass es direkt im Anwendungscode verwendet werden kann.
| Name | Binäre Größe | String-Größe | Merkmale |
|---|---|---|---|
| UUID | 16 Byte | 36 Zeichen | Konfigurationsfrei, nicht sortierbar |
| shortuuid | 16 Byte | 22 Zeichen | Konfigurationsfrei, nicht sortierbar |
| Schneeflocke | 8 Byte | bis zu 20 Zeichen | Benötigt Maschinen-/DC-Konfiguration, benötigt zentralen Server, sortierbar |
| MongoID | 12 Byte | 24 Zeichen | konfigurationsfrei, sortierbar |
| xid | 12 Byte | 20 Zeichen | konfigurationsfrei, sortierbar |
32-Bit
BenchmarkDotNet=v0.10.9, Betriebssystem=Windows 10 Redstone 2 (10.0.15063)
Prozessor = Intel Core i7-6820HQ CPU 2,70 GHz (Skylake), ProcessorCount = 8
Frequenz=2648436 Hz, Auflösung=377,5813 ns, Timer=TSC
[Host]: .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2101.1
Standardjob: .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2101.1
| Verfahren | Bedeuten | Fehler | StdDev |
|---|---|---|---|
| CreateXidBenchmark | 36,94 ns | 0,2248 ns | 0,2103 ns |
| CreateGuidBenchmark | 201,27 ns | 6,9994 ns | 6,5473 ns |
64-Bit
BenchmarkDotNet=v0.10.9, Betriebssystem=Windows 10 Redstone 2 (10.0.15063)
Prozessor = Intel Core i7-6820HQ CPU 2,70 GHz (Skylake), ProcessorCount = 8
Frequenz=2648436 Hz, Auflösung=377,5813 ns, Timer=TSC
[Host]: .NET Framework 4.7 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.2101.1
Standardjob: .NET Framework 4.7 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.2101.1
| Verfahren | Bedeuten | Fehler | StdDev |
|---|---|---|---|
| CreateXidBenchmark | 23,56 ns | 0,1409 ns | 0,1100 ns |
| CreateGuidBenchmark | 82,41 ns | 0,2656 ns | 0,2354 ns |
Der gesamte Quellcode ist unter der MIT-Lizenz lizenziert. Original Xid-Repo-Lizenz unter; Xid-Lizenz.