سؤال

هو GUID فريدة من نوعها 100 ٪ من الوقت ؟

وسوف تبقى فريدة من نوعها عبر العديد من المواضيع ؟

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

المحلول

في حين أن كل إنشاء GUID لا ضمان أن تكون فريدة من نوعها ، المجموع عدد مفاتيح فريدة من نوعها (2128 أو 3.4×1038) كبيرة بحيث احتمال نفس عدد ولدت مرتين صغيرة جدا.بالنسبة سبيل المثال ، في ملاحظتها الكون الذي يحتوي على حوالي 5×1022 النجوم ؛ كل نجمة ثم يمكن أن يكون 6.8×1015 عالميا الفريدة Guid.

من ويكيبيديا.


هذه بعض مقالات جيدة حول كيفية GUID جعلت (على .صافي) و كيف يمكن الحصول على نفس المعرف الفريد العمومي في الوضع الصحيح.

https://ericlippert.com/2012/04/24/guid-guide-part-one/

https://ericlippert.com/2012/04/30/guid-guide-part-two/

https://ericlippert.com/2012/05/07/guid-guide-part-three/

​​

نصائح أخرى

الإجابة البسيطة هي نعم.

ريمون تشن كتب المادة كبيرة على Guid ولماذا سلاسل فرعية من المعرفات الفريدة العمومية لا مضمونة فريدة من نوعها.يذهب المقال إلى بعض العمق طريقة Guid يتم إنشاؤها و البيانات التي تستخدم لضمان التفرد ، والتي ينبغي أن تذهب إلى بعض طول في شرح لماذا وهم :-)

إذا كنت خائفا من نفس قيم GUID ثم وضع اثنين منهم بجانب بعضها البعض.

Guid.NewGuid().ToString() + Guid.NewGuid().ToString();

إذا كنت مذعور للغاية ثم وضع ثلاثة.

كملاحظة جانبية, كنت تلعب حولها مع وحدة تخزين Guid في نظام التشغيل Windows XP.هذا هو غامض جدا قسم تخطيط مع ثلاثة أقراص و أربعة عشر مجلدا.

\\?\Volume{23005604-eb1b-11de-85ba-806d6172696f}\ (F:)
\\?\Volume{23005605-eb1b-11de-85ba-806d6172696f}\ (G:)
\\?\Volume{23005606-eb1b-11de-85ba-806d6172696f}\ (H:)
\\?\Volume{23005607-eb1b-11de-85ba-806d6172696f}\ (J:)
\\?\Volume{23005608-eb1b-11de-85ba-806d6172696f}\ (D:)
\\?\Volume{23005609-eb1b-11de-85ba-806d6172696f}\ (P:)
\\?\Volume{2300560b-eb1b-11de-85ba-806d6172696f}\ (K:)
\\?\Volume{2300560c-eb1b-11de-85ba-806d6172696f}\ (L:)
\\?\Volume{2300560d-eb1b-11de-85ba-806d6172696f}\ (M:)
\\?\Volume{2300560e-eb1b-11de-85ba-806d6172696f}\ (N:)
\\?\Volume{2300560f-eb1b-11de-85ba-806d6172696f}\ (O:)
\\?\Volume{23005610-eb1b-11de-85ba-806d6172696f}\ (E:)
\\?\Volume{23005611-eb1b-11de-85ba-806d6172696f}\ (R:)
                                     | | | | |
                                     | | | | +-- 6f = o
                                     | | | +---- 69 = i
                                     | | +------ 72 = r
                                     | +-------- 61 = a
                                     +---------- 6d = m

انها ليست أن Guid متشابهة جدا ولكن الحقيقة أن كل Guid يكون سلسلة "ماريو" في نفوسهم.هل هذه صدفة أم أن هناك تفسيرا وراء هذا ؟

الآن, عندما أبحث عن جزء 4 في GUID وجدت حوالي 125.000 يضرب مع وحدة تخزين Guid.

الخلاصة: عندما يتعلق الأمر إلى وحدة تخزين Guid أنها ليست فريدة من نوعها مثل غيرها من المعرفات الفريدة العمومية.

نعم, GUID يجب أن تكون دائما فريدة من نوعها.لأنه يقوم على كل الأجهزة و الوقت ، بالإضافة إلى عدد قليل بت إضافية للتأكد من انها فريدة من نوعها.أنا متأكد من أنه نظريا من الممكن في نهاية المطاف مع اثنين متطابقة منها ، ولكن من غير المرجح للغاية في العالم الحقيقي السيناريو.

هنا مقالة رائعة ريمون تشن على Guid:

https://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx ​ ​ ​

فإنه لا ينبغي أن يحدث.ومع ذلك ، عندما .صافي تحت الحمل الثقيل ، فإنه من الممكن الحصول على تكرار guid.لدي اثنين من مختلف ملقمات ويب باستخدام اثنين من مختلف ملقمات sql.ذهبت إلى دمج البيانات و وجدت لدي 15 مليون guid و 7 التكرارات.

Guids إحصائيا فريدة من نوعها.احتمالات مختلفة العملاء توليد نفس المعرف الفريد العمومي قد يكون (على افتراض أي البق في Guid توليد التعليمات البرمجية).كذلك قد تقلق المعالج glitching بسبب الأشعة الكونية و تقرر أن 2+2=5 واليوم.

المواضيع متعددة تخصيص guid جديد سوف تحصل على قيم فريدة ، ولكن يجب أن وظيفة تتصل الموضوع آمنة.والتي البيئة هو هذا ؟

إريك ليبرت كتب مثيرة جدا للاهتمام سلسلة من المقالات حول Guid.

هناك على النظام 230 أجهزة الكمبيوتر الشخصية في العالم (من بالطبع الكثير من الأجهزة المحمولة باليد أو غير الحوسبة في جهاز الكمبيوتر من الأجهزة التي أكثر أو أقل نفس مستويات من قوة الحوسبة ، ولكن يتيح تجاهل تلك).دعونا نفترض أن نضع كل تلك أجهزة الكمبيوتر في العالم مهمة توليد Guid;إذا كان كل واحد يمكن أن تولد, يقول, 220 Guid في الثانية ثم بعد حوالي 272 ثانية -- مائة وخمسين تريليون سنة - سيكون لديك وقت عالية جدا فرصة توليد تصادم مع الخاص بك محددة GUID.واحتمالات التصادم على جيدة إلا بعد ثلاثين تريليون سنوات.

نظريا, لا, أنها ليست فريدة من نوعها.فمن الممكن أن تولد متطابقة guid مرارا وتكرارا.ومع ذلك ، فإن فرص حدوث ذلك منخفضة بحيث يمكنك أن تفترض أنها فريدة من نوعها.

لقد قرأت قبل أن احتمالات منخفضة جدا أن كنت حقا ينبغي أن الضغط عن شيء آخر--مثل الخادم الخاص بك تلقائيا combusting أو غيرها من الأخطاء في التعليمات البرمجية الخاصة بك.التي افترض انها فريدة من نوعها و لا بناء في أي رمز إلى "الصيد" مكررة-قضاء بعض الوقت الخاص بك على شيء أكثر من المحتمل أن يحدث (أي أي شيء آخر).

أنا جرت محاولة وصف فائدة Guid إلى بلدي بلوق الجمهور (غير الفنية الأسرة أثناء مكوثهم).من هناك (عن طريق ويكيبيديا) ، الاحتمالات توليد نسخة مكررة GUID:

  • 1 في 2^128
  • 1 340 undecillion (لا تقلق ، undecillion ليس على مسابقة)
  • 1 في 3.4 × 10^38
  • 1 في 340,000,000,000,000,000,000,000,000,000,000,000,000

لا شيء يبدو أن أذكر الفعلية الرياضيات من احتمال حدوثه.

أولا, دعونا نفترض أننا يمكن استخدام كامل 128 بت الفضاء (Guid v4 يستخدم فقط 122 بت).

ونحن نعلم أن احتمال عدم الحصول على نسخة في n يختار هو:

(1-1/2128)(1-2/2128)...(1-(n-1)/2128)

لأن 2128 هو أكبر بكثير من n, يمكننا تقريب هذه إلى:

(1-1/2128)n(n-1)/2

ولأن يمكننا أن نفترض n هو أكبر بكثير من 0 ، يمكننا تقريب ذلك:

(1-1/2128)ن^2/2

الآن يمكننا أن نساوي بين هذا إلى "مقبول" احتمال ، دعونا نقول 1%:

(1-1/2128)ن^2/2 = 0.01

ونحن في حل عن n والحصول على:

n = الجذر التربيعي(2* سجل 0.01 / log (1-1/2128))

التي ولفرام ألفا يحصل أن يكون 5.598318 × 1019

لوضع هذا في المنظور ، دعونا نلقي 10000 آلات, كل وجود 4 النواة وحدة المعالجة المركزية, به 4 ghz و الإنفاق 10000 دورات لتوليد Guid وعدم القيام بأي شيء آخر.ثم تأخذ ~111 عاما قبل أن تولد مكررة.

من http://www.guidgenerator.com/online-guid-generator.aspx

ما هو المعرف الفريد العمومي?

المعرف الفريد العمومي (أو UUID) هو اختصار ل 'معرف فريد عمومي' (أو 'المعرف الفريد').بل هو 128 بت عدد صحيح يستخدم لتحديد الموارد.مصطلح GUID يستخدم عادة من قبل المطورين الذين يعملون مع تقنيات مايكروسوفت ، في حين UUID يستخدم في كل مكان آخر.

كيف فريدة من نوعها هو GUID?

128-بت كبيرة بما يكفي و خوارزمية توليد فريدة من نوعها بما فيه الكفاية أنه إذا 1,000,000,000 Guid في الثانية تم إنشاؤها لمدة 1 سنة احتمال تكرار تكون 50% فقط.أو إذا كان كل إنسان على الأرض ولدت 600,000,000 Guid لن يكون هناك سوى 50% احتمال تكرار.

MSDN:

هناك احتمال ضعيف جدا أن قيمة Guid جديد كل أصفار أو يساوي أي Guid.

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

إذا كان الجميع على الأرض الذي هو توليد Guid يلي تلك القواعد ثم Guid الخاص بك سوف تكون فريدة من نوعها على الصعيد العالمي.

في الممارسة العملية ، فإن عدد الناس الذين ينتهكون القواعد منخفضة ، Guid من غير المرجح أن "الهروب".الصراعات إحصائيا واردا.

لقد شهدت تكرار GUID.

يمكنني استخدام أنيق إيصالات الماسح الضوئي على سطح المكتب كما أنه يأتي مع الملكية قاعدة بيانات البرنامج.برنامج المزامنة السحابية ميزة و ظللت الحصول على خطأ عند المزامنة.نظرة على سجلات كشفت رهيبة الخط:

"أخطاء":[{"كود":1,"الرسالة":"creator_guid:بالفعل اتخذت","المعرف الفريد العمومي":"C83E5734-D77A-4B09-B8C1-9623CAC7B167"}]}

أنا كان قليلا في الكفر ، ولكن بالتأكيد بما فيه الكفاية ، عندما وجدت طريقة في بلدي المحلية neatworks قاعدة البيانات حذف سجل يحتوي هذا GUID الخطأ توقفت الحدوث.

لذا للإجابة على السؤال مع الأدلة القولية لا.نسخة مكررة من الممكن.ولكن من المرجح أن سبب ذلك حدث لم يكن نتيجة الصدفة ، ولكن بسبب الممارسة القياسية لا يتم الالتزام بها في بعض الطريق.(أنا لست محظوظا) ولكن لا أستطيع أن أقول على وجه اليقين.لم يكن هذا البرنامج.

دعم العملاء كان مهذب للغاية ومفيدة ، ولكن يجب أن واجهت هذه المشكلة من قبل لأنه بعد 3+ ساعات على الهاتف معهم لم تجد الحل.(FWIW, وأنا معجب جدا أنيق و هذا خلل, ومع ذلك محبطا ، لم يغير رأيي من المنتج.)

هو GUID فريدة من نوعها 100 ٪ من الوقت ؟

ليس مضمونا ، حيث أن هناك عدة طرق توليد واحدة.ومع ذلك ، يمكنك محاولة لحساب فرصة إنشاء اثنين من المعرفات الفريدة العمومية التي هي متطابقة و يمكنك الحصول على هذه الفكرة:GUID 128 بت ، ومن ثم ، هناك 2128 متميزة Guid – كثيرا أكثر من عدد النجوم في الكون المعروف.قراءة مقالة ويكيبيديا للحصول على مزيد من التفاصيل.

GUID خوارزميات عادة ما تنفذ وفقا v4 GUID مواصفات, التي هي في الأساس شبه عشوائي السلسلة.للأسف هذه تندرج في فئة من "من المحتمل غير فريدة من نوعها", من ويكيبيديا (أنا لا أعرف لماذا الكثير من الناس يتجاهلون هذا الشيء):"...أخرى GUID إصدارات مختلفة تفرد خصائص الاحتمالات ، بدءا من ضمان تفرد المرجح عدم تفرد."

شبه عشوائي خصائص محرك V8 جافا سكريبت Math.random() هي رهيبة في التفرد ، مع اصطدام وغالبا ما يأتي بعد فقط بضعة آلاف من التكرار ، ولكن V8 ليس المذنب الوحيد.لقد رأيت العالم الحقيقي GUID التصادم باستخدام كل من PHP و Ruby تطبيقات v4 Guid.

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

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

http://usecuid.org/

لقد شهدت Guid لا يجري فريدة من نوعها أثناء متعددة الخيوط/عملية متعددة وحدة اختبار (أيضا؟).أعتقد أن هذا له علاقة مع جميع الرنين متساوية ، متطابقة البذر (أو عدم وجود البذر) من شبه عشوائي المولدات.لقد تم استخدامه لتوليد أسماء ملفات فريدة.لقد وجدت نظام التشغيل هو أفضل بكثير في القيام بذلك :)

التصيد في حالة تأهب

تسأل إذا Guid 100% فريدة من نوعها.ذلك يعتمد على عدد من المعرفات الفريدة العمومية يجب أن تكون فريدة من نوعها بين.كما عدد من المعرفات الفريدة العمومية نهج اللانهاية ، احتمال تكرار Guid تقترب من 100%.

بمعنى أعم, هذا هو المعروف باسم "عيد ميلاد المشكلة" أو "عيد ميلاد المفارقة".ويكيبيديا لديها جيدة نظرة عامة على:ويكيبيديا - عيد ميلاد المشكلة

في صعبة للغاية حيث الجذر التربيعي حجم المسبح هي تقريبية عندما يمكن أن نتوقع فرصة 50 ٪ من نسخة مكررة.المقال يتضمن احتمال طاولة بلياردو حجم مختلف الاحتمالات ، بما في ذلك الصف 2^128.حتى 1% احتمال الاصطدام كنت تتوقع أن اختيار عشوائيا 2.6*10^18 128 بت الأرقام.فرصة 50% يتطلب 2.2*10^19 يختار ، بينما الجذر التربيعي(2^128) 1.8*10^19.

بالطبع هذا هو مجرد حالة مثالية حقا عملية عشوائية.مثل الآخرين ذكر الكثير هو ركوب على ذلك عشوائية الجانب فقط كيف جيدة هو مولد و البذور ؟ فإنه سيكون من الرائع إذا كان هناك بعض الأجهزة الدعم للمساعدة في هذه العملية التي من شأنها أن تكون أكثر واقية من الرصاص إلا أن أي شيء يمكن أن يكون المغشوش أو الافتراضية.وأظن أنه قد يكون السبب في عناوين MAC/الوقت الطوابع لم تعد تدرج.

الجواب "هو GUID هو 100 ٪ فريدة من نوعها؟" هو ببساطة "لا" .

  • إذا كنت تريد 100% تفرد GUID ثم القيام بعد.

    1. إنشاء GUID
    2. تحقق مما إذا كان هذا GUID موجودة في عمود الجدول حيث كنت تبحث عن uniquensess
    3. إذا كانت موجودة ثم انتقل إلى الخطوة 1 آخر خطوة 4
    4. استخدام هذا المعرف الفريد العمومي فريدة من نوعها.

الجزء الأصعب هو لا حول توليد تكرار Guid.

الجزء الأصعب هو تصميم قاعدة بيانات لتخزين جميع ولدت منها للتحقق مما إذا كان هو في الواقع تكرار.

من ويكي:

على سبيل المثال ، عدد عشوائي الإصدار 4 UUIDs التي تحتاج إلى يتم إنشاؤها من أجل الحصول على 50% احتمال واحد على الأقل في تصادم 2.71 تريليون وتحسب على النحو التالي:

أدخل وصف الصورة هنا

هذا الرقم يعادل توليد 1 مليار UUIDs في الثانية لمدة 85 سنة, ملف يحتوي على العديد من UUIDs في 16 بايت في UUID, سيكون حوالي 45 إكسا بايت, عدد مرات أكبر من أكبر قواعد البيانات الموجودة حاليا ، والتي هي على الترتيب من مئات بيتابايت

GUID تقف العالمي المعرف الفريد

في سطور:(على فكرة هي في الاسم)

في التفاصيل:GUIDs مصممة لتكون فريدة من نوعها ؛ يتم حسابها باستخدام طريقة عشوائية استنادا إلى أجهزة الكمبيوتر على مدار الساعة و الكمبيوتر نفسه, إذا كنت تقوم بإنشاء العديد من المعرفات الفريدة العمومية في نفس ميلي ثانية واحدة على نفس الجهاز فمن الممكن أنها قد المباراة ولكن تقريبا جميع العمليات العادية ينبغي أن تعتبر فريدة من نوعها.

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