سؤال

أحتاج إلى إنشاء معرف سجل فريد من نوعه للحصول على السلسلة الفريدة المعينة.

حاولت استخدام تنسيق UIID الذي يبدو أنه جيد.

لكننا نشعر أن هذا هو بالطول.

لذلك نحن بحاجة إلى خفض سلسلة UUID 9F218A38-12CD-5942-B877-80ADC0589315 إلى أصغر. عن طريق إزالة "-" يمكننا حفظ 4 chars. ما هو الجزء الأكثر أمانا لإزالة من Uuid؟ لا نحتاج إلى معرف فريد عالميا ولكن نود استخدام UIID كمصدر ولكن خفض الأوتار.

نحتاج إلى معرف فريد خاص بموقع / قاعدة بيانات (خدمات بيانات SQL Server / ADO.NET).

أي فكرة أو عينة من أي لغة على ما يرام

شكرا مقدما

هل كانت مفيدة؟

المحلول

لماذا لا تحول ذلك بدلا من ذلك إلى سلسلة 64 قاعدة؟ يمكنك خفضه إلى 22 حرفا بهذه الطريقة.

تخزين UUID كسلسلة Base64

نصائح أخرى

إذا كنت تستخدم MS-SQL، فلا يجب عليك فقط استخدام DataType Uniqueindentifier، فهو كلاهما مضغوط (16 بايت) ولأن محرك SQL يعرف عن ذلك، فيمكنه تحسين الفهارس والاستعلامات باستخدامه.

يوفر UUID (تقريبا) 128 بت من التفرد. يمكنك تقصيرها إلى 16 بايت ثنائية، أو 22 حرفا مشفرا من Base64. لن أوصي بإزالة أي جزء من UUID، وإلا فإنه يفقد إحساسه. تم تصميم Uuids بحيث تكون جميع البتات 128 معنى. إذا كنت تريد أقل من ذلك، فيجب عليك استخدام بعض المخططات الأخرى.

على سبيل المثال، إذا كنت تستطيع أن تضمن أنه يتم استخدام Uuids الإصدار 4 فقط، فيمكنك أن تأخذ فقط أول 32 بت أو آخر 32 بت آخر. تفقد التفرد، ولكن لديك أرقام عشوائية جميلة. فقط تجنب البتات التي تم إصلاحها (الإصدار والتبابق).

ولكن إذا لم تتمكن من ضمان ذلك، فستكون لديك مشاكل حقيقية. بالنسبة للإصدار 1 Uuids، لن تكون البتات الأولى فريدة من نوعها بالنسبة لأغراض Uuids التي تم إنشاؤها في نفس اليوم، ولن تكون البتات الأخيرة فريدة من نوعها لأختام Uuids الناتجة في نفس النظام. حتى لو كنت تقوم CRC في UUID، فهي غير مضمونة سيكون لديك 16 أو 32 بت من التفرد.

في هذه الحالة، فقط استخدم بعض المخطط الآخر. قم بإنشاء رقم عشوائي 32 بت باستخدام مولد الأرقام العشوائية النظام واستخدامه كمعرف فريد من نوعه. لا تعتمد على Uuids إذا كنت تنوي تجريد طولها.

Uuid هو 128 بت أو 16 بايت. مع عدم وجود ترميز، يمكنك الحصول عليها منخفضة تصل إلى 16 بايت. يتم كتابة Uuids بشكل شائع في السداسي عشري، مما يجعلها 32 سلاسل قابلة للقراءة 32 بايت. مع الترميزات الأخرى، تحصل على نتائج مختلفة:

  1. BASE-64 يتحول 3 بايت 8 بت إلى 4 شخصيات 6 بت، لذلك يصبح 16 بايت من البيانات 22 حرفا
  2. BASE-85 يتحول 4 بايت 8 بت إلى 5 شخصيات 6.4 بت، لذلك يصبح 16 بايت من البيانات 20 حرفا

كل هذا يتوقف على ما إذا كنت تريد سلاسل قابلة للقراءة وكيف تشفير قياسي / مشترك تريد استخدامه.

uuid لديه 128 بت. هل فكرت في إجراء اتفاقية حقوق الطفل من ذلك؟ يمكن أن يحصل ذلك على 16 أو 32 بت بسهولة، وسوف تستخدم جميع المعلومات الأصلية. إذا لم تكن CRC جيدة بما فيه الكفاية، فيمكنك دائما استخدام البايت القليلة الأولى من التجزئة المناسبة (SHA256، على سبيل المثال).

إذا كنت ترغب حقا في خفض UUID فقط، فسيتم وصف تنسيقه RFC 4122.. وبعد يجب أن تكون قادرا على معرفة الأجزاء التي لا يحتاجها تنفيذها من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top