هل تجزئة المعرف الفريد العمومي (GUID) فريدة من نوعها؟

StackOverflow https://stackoverflow.com/questions/138279

  •  02-07-2019
  •  | 
  •  

سؤال

أقوم بإنشاء GUID (كسلسلة) وأحصل على تجزئة له.هل يمكنني اعتبار هذه التجزئة فريدة من نوعها؟

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

المحلول

ليس فريدًا بشكل موثوق مثل المعرّف الفريد العمومي (GUID) نفسه، لا.

فقط للتوسع، فإنك تقلل من تفردك بعامل 4، بدءًا من 16 بايت إلى 4 بايت من المجموعات الممكنة.

كما هو مذكور في التعليقات، فإن حجم التجزئة سيحدث فرقًا.كان الشيء ذو الـ 4 بايت بمثابة افتراض، وهو أمر فظيع في أحسن الأحوال، كما أعلم، أنه يمكن استخدامه في .NET، حيث يكون حجم التجزئة الافتراضي هو 4 بايت (int).لذا يمكنك استبدال ما قلته أعلاه بأي حجم بايت قد يكون لديك.

نصائح أخرى

لا.

انظر هنا، إذا كنت تريد GUID صغيرًا: http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

في كلمة واحدة، لا.

لنفترض أن التجزئة الخاصة بك تحتوي على بتات أقل من GUID، وفقًا لمبدأ الحمام، يجب أن يكون هناك أكثر من تعيين واحد لبعض GUID -> التجزئة ببساطة لأن هناك تجزئات أقل من GUIDs.

إذا افترضنا أن التجزئة تحتوي على عدد أكبر من البتات من المعرف الفريد العمومي (GUID)، فهناك فرصة صغيرة جدًا - ولكنها محدودة - لحدوث تصادم، على افتراض أنك تستخدم دالة تجزئة جيدة.

لن تؤدي أي دالة تجزئة تعمل على تقليل كتلة بيانات ذات حجم عشوائي إلى عدد ثابت من البتات إلى إنتاج تعيين 1 إلى 1 بين الاثنين.ستكون هناك دائمًا فرصة لتقليص كتلتين مختلفتين من البيانات إلى نفس تسلسل البتات في التجزئة.

تقلل خوارزميات التجزئة الجيدة من احتمالية حدوث ذلك، وبشكل عام، كلما زاد عدد البتات في التجزئة، قلت فرصة الاصطدام.

إنه غير مضمونة أن ذلك يعود إلى اصطدامات التجزئة.المعرف الفريد العمومي (GUID) نفسه يكاد يكون مضمونًا.

لأسباب عملية، ربما يمكنك افتراض أن التجزئة فريدة من نوعها، ولكن لماذا لا تستخدم المعرف الفريد العمومي (GUID) نفسه؟

لا، ولن أفترض تفرد أي قيمة تجزئة.لا ينبغي أن يكون ذلك مهمًا لأن قيم التجزئة لا تحتاج إلى أن تكون فريدة، بل تحتاج فقط إلى توزيعها بالتساوي عبر نطاقها.كلما كان التوزيع متساويًا، قل عدد الاصطدامات (في جدول التجزئة).عدد أقل من الاصطدامات يعني أداء أفضل للتجزئة.

لمعلوماتك للحصول على وصف جيد لكيفية عمل جداول التجزئة، اقرأ الإجابة المقبولة على ما هي جداول التصنيف والهاشماب وحالات استخدامها النموذجية؟

إذا كنت تستخدم تجزئة التشفير (MD5، SHA1، RIPEMD160)، فستكون التجزئة فريدة من نوعها (تصادمات الوحدات غير محتملة جدًا - يتم استخدام SHA1 على سبيل المثال.للتوقيعات الرقمية، كما أن MD5 مقاوم للتصادم المدخلات العشوائية).بالرغم من ذلك، لماذا تريد تجزئة المعرف الفريد العمومي (GUID)؟

أرغب في تجزئة حجم GUID إلى X مع إدراك أنه في بعض الأحيان يكون لدي 10 GUID أو أقل في المجموعة، لذلك قد أتخلص من تجزئة أقصر دون تصادم مما لو كان لدي 10،000،000 GUID في مجموعة.أود فقط أن أكون قادرًا على تحديد حجم التجزئة عندما أقوم باستدعاء الوظيفة.

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