Proyek ini adalah port .Net (dengan modifikasi) https://github.com/rs/xid oleh Olivier Poitrey. Bagian penting dari kode dan readme ini didasarkan pada proyek tersebut.
Xid.Net adalah perpustakaan pembuat id yang unik secara global, siap digunakan dengan aman dan langsung dalam kode Anda. Ini menyediakan antarmuka yang mirip dengan System.Guid tetapi menghasilkan id yang lebih kecil (12 byte vs 16 dalam format mentah, 20 vs 36 ketika dikonversi ke string). Menghasilkan Xids lebih cepat daripada Guids, seringkali secara signifikan.
Xid menggunakan algoritme ID Objek Mongo untuk menghasilkan id unik global dengan serialisasi berbeda (base32 vs base64) agar lebih pendek saat diangkut sebagai string: https://docs.mongodb.org/manual/reference/object-id/.
PM > Install-Package Yort.Xid.NetMembuat Xid;
var id = Xid . NewXid ( ) ;Mengonversi ke Xid menjadi string;
var id = Xid . NewXid ( ) ;
var idString = id . ToString ( ) ;Mengonversi string menjadi Xid (metode TryParse juga disediakan);
var idString = " 9m4e2mr0ui3e8a215n4g " ;
var id = Xid . Parse ( idString ) ;Mengonversi ke Xid ke array byte;
var id = Xid . NewXid ( ) ;
var bytes = id . ToBytes ( ) ;atau
var id = Xid . NewXid ( ) ;
var preallocatedByteArray = new byte [ 12 ] ;
var bytes = id . ToBytes ( preallocatedByteArray ) ;Mendapatkan komponen Xid;
var xid = Xid . NewXid ( ) ;
DateTime timestamp = xid . GetTimeStamp ( ) ;
byte [ ] machineId = xid . GetMachineId ( ) ;
UInt16 processId = xid . GetProcessId ( ) ;
int counter = xid . GetCounter ( ) ;Juga didukung/fitur lain dari implementasi .Net;
Format Xid adalah;
Representasi biner dari id kompatibel dengan ID Objek Mongo 12 byte. Representasi string menggunakan hex base32 (tanpa padding) untuk efisiensi ruang yang lebih baik bila disimpan dalam bentuk tersebut (20 byte). Varian hex dari base32 digunakan untuk mempertahankan properti sortable dari id.
Xid tidak menggunakan base64 karena sensitivitas huruf besar dan 2 karakter non alfanumer mungkin menjadi masalah saat dipindahkan sebagai string antara berbagai sistem. Base36 tidak digunakan karena tidak standar, ukuran yang dihasilkan tidak dapat diprediksi (tidak selaras), dan tidak dapat diurutkan. Untuk memvalidasi xid base32, perkirakan sepanjang 20 karakter, semua urutan huruf kecil menggunakan karakter dalam rentang angka a hingga v dan 0 hingga 9 angka ([0-9a-v]{20}).
UUID berukuran 16 byte (128 bit) dan 36 karakter sebagai representasi string. ID Twitter Snowflake berukuran 8 byte (64 bit) tetapi memerlukan konfigurasi mesin/pusat data dan/atau server generator pusat. Xid berada di antara 12 byte (96 bit) dengan representasi string aman-URL yang lebih ringkas (20 karakter). Tidak diperlukan konfigurasi atau server generator pusat sehingga dapat digunakan langsung dalam kode aplikasi.
| Nama | Ukuran Biner | Ukuran Tali | Fitur |
|---|---|---|---|
| UUID | 16 byte | 36 karakter | konfigurasi gratis, tidak dapat diurutkan |
| pendekuuid | 16 byte | 22 karakter | konfigurasi gratis, tidak dapat diurutkan |
| Kepingan salju | 8 byte | hingga 20 karakter | memerlukan konfigurasi mesin/DC, memerlukan server pusat, dapat diurutkan |
| MongoID | 12 byte | 24 karakter | konfigurasi gratis, dapat diurutkan |
| xi | 12 byte | 20 karakter | konfigurasi gratis, dapat diurutkan |
32-bit
BenchmarkDotNet=v0.10.9, OS=Windows 10 Redstone 2 (10.0.15063)
Prosesor=CPU Intel Core i7-6820HQ 2,70GHz (Skylake), Jumlah Prosesor=8
Frekuensi=2648436 Hz, Resolusi=377,5813 ns, Timer=TSC
[Host] : .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2101.1
Pekerjaan Default: .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2101.1
| Metode | Berarti | Kesalahan | StdDev |
|---|---|---|---|
| BuatXidBenchmark | 36,94 ns | 0,2248 ns | 0,2103 ns |
| BuatGuidBenchmark | 201,27 ns | 6,9994 ns | 6,5473 ns |
64-bit
BenchmarkDotNet=v0.10.9, OS=Windows 10 Redstone 2 (10.0.15063)
Prosesor=CPU Intel Core i7-6820HQ 2,70GHz (Skylake), Jumlah Prosesor=8
Frekuensi=2648436 Hz, Resolusi=377,5813 ns, Timer=TSC
[Host] : .NET Framework 4.7 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.2101.1
Pekerjaan Default: .NET Framework 4.7 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.2101.1
| Metode | Berarti | Kesalahan | StdDev |
|---|---|---|---|
| BuatXidBenchmark | 23,56 ns | 0,1409 ns | 0,1100 ns |
| BuatGuidBenchmark | 82,41 ns | 0,2656 ns | 0,2354 ns |
Semua kode sumber dilisensikan di bawah Lisensi MIT. Lisensi repo Xid asli di; Lisensi Xid.