このプロジェクトは、Olivier Poitrey による https://github.com/rs/xid の .Net ポート (修正あり) です。コードの重要な部分とこの Readme はそのプロジェクトに基づいています。
Xid.Net は、コード内で安全かつ直接使用できる、世界的に一意の ID ジェネレーター ライブラリです。 System.Guid に似たインターフェイスを提供しますが、より小さい ID を生成します (生の形式では 16 バイトに対して 12 バイト、文字列に変換すると 20 バイトに対して 36)。 Xid の生成は、Guid よりも高速であり、多くの場合大幅に高速です。
Xid は、Mongo オブジェクト ID アルゴリズムを使用して、異なるシリアル化 (base32 と Base64) でグローバルに一意の ID を生成し、文字列として転送するときに ID を短くします: https://docs.mongodb.org/manual/reference/object-id/。
PM > Install-Package Yort.Xid.NetXid の作成;
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 16 進数 (パディングなし) を使用して、その形式 (20 バイト) で保存する際のスペース効率を高めます。 Base32 の 16 進数のバリアントは、ID の並べ替え可能なプロパティを保持するために使用されます。
Xid は、さまざまなシステム間で文字列として転送されるときに大文字と小文字の区別と 2 つの非英数字が問題になる可能性があるため、base64 を使用しません。 Base36 は標準ではないため、使用されませんでした。その理由は、結果のサイズが予測できず (ビット整列されていない)、並べ替え可能な状態を維持できないためです。 Base32 xid を検証するには、a ~ v の範囲の文字と 0 ~ 9 の数字 ([0-9a-v]{20}) を使用した、長さ 20 文字のすべて小文字のシーケンスを想定します。
UUID は 16 バイト (128 ビット) で、文字列表現としては 36 文字です。 Twitter Snowflake ID は 8 バイト (64 ビット) ですが、マシン/データセンター構成および/または中央ジェネレーター サーバーが必要です。 Xid は、よりコンパクトな URL セーフな文字列表現 (20 文字) を備えた 12 バイト (96 ビット) で中間に位置します。構成や中央ジェネレータ サーバーは必要ないため、アプリケーション コードで直接使用できます。
| 名前 | バイナリサイズ | 文字列のサイズ | 特徴 |
|---|---|---|---|
| UUID | 16バイト | 36文字 | 構成は自由ですが、並べ替えはできません |
| ショートウィド | 16バイト | 22文字 | 構成は自由ですが、並べ替えはできません |
| スノーフレーク | 8バイト | 20文字まで | マシン/DC 構成が必要、中央サーバーが必要、ソート可能 |
| モンゴID | 12バイト | 24文字 | 設定不要、並べ替え可能 |
| xid | 12バイト | 20文字 | 設定不要、並べ替え可能 |
32ビット
BenchmarkDotNet=v0.10.9、OS=Windows 10 レッドストーン 2 (10.0.15063)
プロセッサー=Intel Core i7-6820HQ CPU 2.70GHz (Skylake)、プロセッサー数=8
周波数=2648436Hz、分解能=377.5813ns、タイマー=TSC
[ホスト] : .NET Framework 4.7 (CLR 4.0.30319.42000)、32bit LegacyJIT-v4.7.2101.1
デフォルトジョブ: .NET Framework 4.7 (CLR 4.0.30319.42000)、32 ビット LegacyJIT-v4.7.2101.1
| 方法 | 平均 | エラー | 標準偏差 |
|---|---|---|---|
| CreateXidBenchmark | 36.94ns | 0.2248ns | 0.2103ns |
| CreateGuidBenchmark | 201.27ns | 6.9994ns | 6.5473ns |
64ビット
BenchmarkDotNet=v0.10.9、OS=Windows 10 レッドストーン 2 (10.0.15063)
プロセッサー=Intel Core i7-6820HQ CPU 2.70GHz (Skylake)、プロセッサー数=8
周波数=2648436Hz、分解能=377.5813ns、タイマー=TSC
[ホスト] : .NET Framework 4.7 (CLR 4.0.30319.42000)、64bit RyuJIT-v4.7.2101.1
デフォルトジョブ:.NET Framework 4.7 (CLR 4.0.30319.42000)、64ビット RyuJIT-v4.7.2101.1
| 方法 | 平均 | エラー | 標準偏差 |
|---|---|---|---|
| CreateXidBenchmark | 23.56ns | 0.1409ns | 0.1100ns |
| CreateGuidBenchmark | 82.41ns | 0.2656ns | 0.2354ns |
すべてのソース コードは MIT ライセンスに基づいてライセンスされています。元の Xid リポジトリ ライセンスは次の場所にあります。シドライセンス。