Este proyecto es un puerto .Net (con modificaciones) de https://github.com/rs/xid de Olivier Poitrey. Partes importantes del código y este archivo Léame se basan en ese proyecto.
Xid.Net es una biblioteca generadora de identificación única a nivel mundial, lista para usarse de forma segura y directamente en su código. Proporciona una interfaz similar a System.Guid pero genera identificadores que son más pequeños (12 bytes frente a 16 en formato sin formato, 20 frente a 36 cuando se convierte en una cadena). Generar Xids es más rápido que Guids, a menudo de manera significativa.
Xid utiliza el algoritmo Mongo Object ID para generar identificadores únicos globalmente con una serialización diferente (base32 vs base64) para hacerlo más corto cuando se transporta como una cadena: https://docs.mongodb.org/manual/reference/object-id/.
PM > Install-Package Yort.Xid.Net
Creando un Xid;
var id = Xid . NewXid ( ) ;
Convertir a Xid en una cadena;
var id = Xid . NewXid ( ) ;
var idString = id . ToString ( ) ;
Convertir una cadena a Xid (también se proporciona el método TryParse);
var idString = " 9m4e2mr0ui3e8a215n4g " ;
var id = Xid . Parse ( idString ) ;
Conversión de Xid a una matriz de bytes;
var id = Xid . NewXid ( ) ;
var bytes = id . ToBytes ( ) ;
o
var id = Xid . NewXid ( ) ;
var preallocatedByteArray = new byte [ 12 ] ;
var bytes = id . ToBytes ( preallocatedByteArray ) ;
Obteniendo componentes de un Xid;
var xid = Xid . NewXid ( ) ;
DateTime timestamp = xid . GetTimeStamp ( ) ;
byte [ ] machineId = xid . GetMachineId ( ) ;
UInt16 processId = xid . GetProcessId ( ) ;
int counter = xid . GetCounter ( ) ;
También se admiten/otras características de la implementación de .Net;
El formato de un Xid es;
La representación binaria de la identificación es compatible con las identificaciones de objetos de Mongo de 12 bytes. La representación de cadena utiliza base32 hexadecimal (sin relleno) para una mejor eficiencia del espacio cuando se almacena en ese formato (20 bytes). La variante hexadecimal de base32 se utiliza para conservar la propiedad ordenable de la identificación.
Xid no usa base64 porque la distinción entre mayúsculas y minúsculas y los 2 caracteres no alfanuméricos pueden ser un problema cuando se transportan como una cadena entre varios sistemas. Base36 no se usó porque no es estándar, el tamaño resultante no es predecible (no está alineado en bits) y no se puede ordenar. Para validar un xid base32, espere una secuencia de 20 caracteres de longitud, todo en minúsculas, utilizando caracteres en el rango de a a v y de 0 a 9 números ([0-9a-v]{20}).
Los UUID tienen 16 bytes (128 bits) y 36 caracteres como representación de cadena. Los ID de Twitter Snowflake son de 8 bytes (64 bits), pero requieren la configuración de la máquina/centro de datos y/o servidores generadores centrales. Xid se encuentra en el medio con 12 bytes (96 bits) con una representación de cadena segura para URL más compacta (20 caracteres). No se requiere configuración ni servidor generador central, por lo que se puede utilizar directamente en el código de la aplicación.
Nombre | Tamaño binario | Tamaño de cadena | Características |
---|---|---|---|
UUID | 16 bytes | 36 caracteres | configuración libre, no ordenable |
corto | 16 bytes | 22 caracteres | configuración libre, no ordenable |
Copo de nieve | 8 bytes | hasta 20 caracteres | necesita configuración de máquina/DC, necesita servidor central, ordenable |
Mongo ID | 12 bytes | 24 caracteres | configuración libre, ordenable |
xid | 12 bytes | 20 caracteres | configuración libre, ordenable |
32 bits
BenchmarkDotNet=v0.10.9, SO=Windows 10 Redstone 2 (10.0.15063)
Procesador=CPU Intel Core i7-6820HQ 2,70 GHz (Skylake), Número de procesadores=8
Frecuencia=2648436 Hz, Resolución=377,5813 ns, Temporizador=TSC
[Anfitrión]: .NET Framework 4.7 (CLR 4.0.30319.42000), LegacyJIT-v4.7.2101.1 de 32 bits
Trabajo predeterminado: .NET Framework 4.7 (CLR 4.0.30319.42000), LegacyJIT-v4.7.2101.1 de 32 bits
Método | Significar | Error | DesvStd |
---|---|---|---|
CrearXidBenchmark | 36,94 segundos | 0,2248 ns | 0,2103 ns |
CrearGuidBenchmark | 201,27 ns | 6,9994 ns | 6,5473 ns |
64 bits
BenchmarkDotNet=v0.10.9, SO=Windows 10 Redstone 2 (10.0.15063)
Procesador=CPU Intel Core i7-6820HQ 2,70 GHz (Skylake), Número de procesadores=8
Frecuencia=2648436 Hz, Resolución=377,5813 ns, Temporizador=TSC
[Anfitrión]: .NET Framework 4.7 (CLR 4.0.30319.42000), RyuJIT-v4.7.2101.1 de 64 bits
Trabajo predeterminado: .NET Framework 4.7 (CLR 4.0.30319.42000), RyuJIT-v4.7.2101.1 de 64 bits
Método | Significar | Error | DesvStd |
---|---|---|---|
CrearXidBenchmark | 23,56 ns | 0,1409 ns | 0,1100 ns |
CrearGuidBenchmark | 82,41 ns | 0,2656 ns | 0,2354 ns |
Todo el código fuente tiene la licencia MIT. Licencia de repositorio original de Xid en; Licencia Xid.