هذا المشروع عبارة عن منفذ .Net (مع تعديلات) لـ https://github.com/rs/xid بواسطة Olivier Poitrey. تعتمد أجزاء كبيرة من الكود وهذا الملف التمهيدي على هذا المشروع.
Xid.Net هي مكتبة عالمية فريدة من نوعها لإنشاء المعرفات، وهي جاهزة للاستخدام بشكل آمن ومباشر في التعليمات البرمجية الخاصة بك. وهو يوفر واجهة مشابهة لـ System.Guid ولكنه ينشئ معرفات أصغر (12 بايت مقابل 16 في التنسيق الأولي، 20 مقابل 36 عند تحويلها إلى سلسلة). يعد إنشاء Xids أسرع من Guides، وغالبًا ما يكون ذلك بشكل ملحوظ.
يستخدم Xid خوارزمية Mongo Object ID لإنشاء معرفات فريدة عالميًا بتسلسل مختلف (base32 vs base64) لجعلها أقصر عند نقلها كسلسلة: 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 هو؛
التمثيل الثنائي للمعرف متوافق مع معرفات كائن Mongo 12 بايت. يستخدم تمثيل السلسلة قاعدة 32 السداسية (بدون الحشو) لتحسين كفاءة المساحة عند تخزينها بهذا النموذج (20 بايت). يتم استخدام المتغير السداسي لـ base32 للاحتفاظ بالخاصية القابلة للفرز للمعرف.
لا يستخدم Xid base64 لأن حساسية حالة الأحرف والحرفين غير الأبجديين قد يمثلان مشكلة عند نقلهما كسلسلة بين الأنظمة المختلفة. لم يتم استخدام Base36 لأنه ليس قياسيًا، ولا يمكن التنبؤ بالحجم الناتج (غير محاذي للبت)، ولن يظل قابلاً للفرز. للتحقق من صحة base32 xid، توقع طول 20 حرفًا، كل التسلسلات الصغيرة باستخدام أحرف في النطاق من a إلى v ومن 0 إلى 9 أرقام ([0-9a-v]{20}).
UUIDs هي 16 بايت (128 بت) و36 حرفًا كتمثيل سلسلة. يبلغ حجم معرفات Twitter Snowflake 8 بايت (64 بت) ولكنها تتطلب تكوين الجهاز/مركز البيانات و/أو خوادم المولدات المركزية. يقف Xid بين 12 بايت (96 بت) مع تمثيل سلسلة أكثر إحكاما لعنوان URL الآمن (20 حرفًا). لا يلزم تكوين أو خادم مولد مركزي بحيث يمكن استخدامه مباشرة في كود التطبيق.
اسم | الحجم الثنائي | حجم السلسلة | سمات |
---|---|---|---|
UUID | 16 بايت | 36 حرفا | التكوين مجاني، غير قابل للفرز |
com.shortuid | 16 بايت | 22 حرفا | التكوين مجاني، غير قابل للفرز |
ندفة الثلج | 8 بايت | ما يصل إلى 20 حرفا | يحتاج إلى تكوين الجهاز/التيار المستمر، ويحتاج إلى خادم مركزي، وقابل للفرز |
معرف مونجو | 12 بايت | 24 حرفا | التكوين مجاني، قابل للفرز |
xid | 12 بايت | 20 حرفا | التكوين مجاني، قابل للفرز |
32 بت
BenchmarkDotNet=v0.10.9، نظام التشغيل=Windows 10 Redstone 2 (10.0.15063)
المعالج=وحدة المعالجة المركزية Intel Core i7-6820HQ بسرعة 2.70 جيجا هرتز (Skylake)، عدد المعالجات=8
التردد = 2648436 هرتز، الدقة = 377.5813 نانو ثانية، المؤقت = 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
طريقة | يقصد | خطأ | ستديف |
---|---|---|---|
CreateXidBenchmark | 36.94 نانو ثانية | 0.2248 نانو ثانية | 0.2103 نانو ثانية |
CreateGuidBenchmark | 201.27 نانو ثانية | 6.9994 نانو ثانية | 6.5473 نانو ثانية |
64 بت
BenchmarkDotNet=v0.10.9، نظام التشغيل=Windows 10 Redstone 2 (10.0.15063)
المعالج=وحدة المعالجة المركزية Intel Core i7-6820HQ بسرعة 2.70 جيجا هرتز (Skylake)، عدد المعالجات=8
التردد = 2648436 هرتز، الدقة = 377.5813 نانو ثانية، المؤقت = 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
طريقة | يقصد | خطأ | ستديف |
---|---|---|---|
CreateXidBenchmark | 23.56 نانو ثانية | 0.1409 نانو ثانية | 0.1100 نانو ثانية |
CreateGuidBenchmark | 82.41 نانو ثانية | 0.2656 نانو ثانية | 0.2354 نانو ثانية |
جميع التعليمات البرمجية المصدر مرخصة بموجب ترخيص MIT. ترخيص Xid الريبو الأصلي في؛ رخصة زيد.