該專案是 Olivier Poitrey 對 https://github.com/rs/xid 的 .Net 移植(經過修改)。程式碼和本自述文件的重要部分是基於該專案。
Xid.Net 是一個全球唯一的 id 產生器函式庫,可以直接在您的程式碼中安全地使用。它提供了一個類似於System.Guid 的接口,但生成的 id 更小(原始格式為 12 字節 vs 16 字節,轉換為字串時為 20 字節 vs 36 字節)。產生 Xids 比 Guid 更快,而且通常速度更快。
Xid 使用Mongo 物件ID 演算法產生具有不同序列化(base32 與base64)的全域唯一id,以使其在作為字串傳輸時更短:https://docs.mongodb.org/manual/reference/object-id /。
PM > Install-Package Yort.Xid.Net
創建一個 Xid;
var id = Xid . NewXid ( ) ;
將Xid轉換為字串;
var id = Xid . NewXid ( ) ;
var idString = id . ToString ( ) ;
將字串轉換為 Xid(也提供了 TryParse 方法);
var idString = " 9m4e2mr0ui3e8a215n4g " ;
var id = Xid . Parse ( idString ) ;
轉換Xid為位元組數組;
var id = Xid . NewXid ( ) ;
var bytes = id . ToBytes ( ) ;
或者
var id = Xid . NewXid ( ) ;
var preallocatedByteArray = new byte [ 12 ] ;
var bytes = id . ToBytes ( preallocatedByteArray ) ;
取得 Xid 的組件;
var xid = Xid . NewXid ( ) ;
DateTime timestamp = xid . GetTimeStamp ( ) ;
byte [ ] machineId = xid . GetMachineId ( ) ;
UInt16 processId = xid . GetProcessId ( ) ;
int counter = xid . GetCounter ( ) ;
也支援.Net 實現的/其他功能;
Xid 的格式為:
id 的二進位表示與 Mongo 12 位元組物件 ID 相容。字串表示形式使用 base32 十六進位(無填充),以便以該形式(20 位元組)儲存時獲得更好的空間效率。 Base32 的十六進位變體用於保留 id 的可排序屬性。
Xid 不使用 base64,因為區分大小寫和 2 個非字母字元在不同系統之間作為字串傳輸時可能會出現問題。未使用 Base36,因為它不是標準,結果大小不可預測(不是位元對齊),無法保持可排序。要驗證 Base32 xid,需要使用 a 到 v 範圍內的字元和 0 到 9 數字 ([0-9a-v]{20}) 的 20 個字元長、全小寫序列。
UUID 是 16 個位元組(128 位元)和 36 個字元的字串表示形式。 Twitter Snowflake id 為 8 位元組(64 位元),但需要機器/資料中心配置和/或中央產生器伺服器。 Xid 介於 12 位元組(96 位元)和更緊湊的 URL 安全字串表示形式(20 個字元)之間。無需配置或中央生成器伺服器,因此可以直接在應用程式程式碼中使用。
姓名 | 二進位大小 | 字串大小 | 特徵 |
---|---|---|---|
通用唯一識別符 | 16字節 | 36 個字符 | 自由配置,不可排序 |
短UID | 16字節 | 22 個字符 | 自由配置,不可排序 |
雪花 | 8位元組 | 最多 20 個字符 | 需要機器/DC配置,需要中央伺服器,可排序 |
蒙戈ID | 12位元組 | 24 個字符 | 免配置、可排序 |
西德 | 12位元組 | 20 個字符 | 免配置、可排序 |
32位
BenchmarkDotNet=v0.10.9,作業系統=Windows 10 Redstone 2 (10.0.15063)
處理器=Intel Core i7-6820HQ CPU 2.70GHz (Skylake), ProcessorCount=8
頻率=2648436 Hz,解析度=377.5813 ns,定時器=TSC
[主機]:.NET Framework 4.7 (CLR 4.0.30319.42000),32 位元 LegacyJIT-v4.7.2101.1
預設作業:.NET Framework 4.7 (CLR 4.0.30319.42000),32 位元 LegacyJIT-v4.7.2101.1
方法 | 意思是 | 錯誤 | 標準差 |
---|---|---|---|
創建XidBenchmark | 36.94奈秒 | 0.2248奈秒 | 0.2103納秒 |
建立GuidBenchmark | 201.27奈秒 | 6.9994奈秒 | 6.5473奈秒 |
64位
BenchmarkDotNet=v0.10.9,作業系統=Windows 10 Redstone 2 (10.0.15063)
處理器=Intel Core i7-6820HQ CPU 2.70GHz (Skylake), ProcessorCount=8
頻率=2648436 Hz,解析度=377.5813 ns,定時器=TSC
[主機]:.NET Framework 4.7 (CLR 4.0.30319.42000),64 位元 RyuJIT-v4.7.2101.1
預設作業:.NET Framework 4.7 (CLR 4.0.30319.42000),64 位元 RyuJIT-v4.7.2101.1
方法 | 意思是 | 錯誤 | 標準差 |
---|---|---|---|
創建XidBenchmark | 23.56奈秒 | 0.1409納秒 | 0.1100奈秒 |
建立GuidBenchmark | 82.41奈秒 | 0.2656奈秒 | 0.2354奈秒 |
所有原始程式碼均根據 MIT 許可證獲得許可。原始 Xid 儲存庫許可證位於;西德許可證。