لماذا يعتبر المعرف الفريد العمومي (GUID) هو الخيار الأفضل لـ PK إذا كنت ستقوم بإجراء النسخ المتماثل؟

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

سؤال

أقوم بإنشاء تطبيق ويب على شبكة إنترانت بواجهة خلفية من Oracle.سيتم نسخ قاعدة بيانات Oracle على خادم آخر لأسباب غير مهمة لهذه المناقشة.أنا متأكد إلى حد معقول من أننا سنستخدم Oracle Basic Replication، وليس Advanced.

هل يمكن لأحد أن يشرح لي لماذا تسير معظم المناقشات حول المفاتيح الأساسية على النحو التالي:

  • يعد استخدام int المتزايد تلقائيًا لـ PKs أمرًا جيدًا بنسبة 99٪ من الوقت
  • باستثناء ما إذا كنت تقوم بالنسخ المتماثل.ثم استخدم المعرفات الفريدة العمومية (GUIDs) لـ PKs الخاصة بك.

يبدو أن لا أحد يشرح سبب استثناء النسخ المتماثل، ولا أفهم السبب.

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

المحلول

أعتقد أن وسيطة GUID-for-Replication تنطبق فقط إذا كان كلا الخادمين سيتلقى بيانات جديدة.ثم لا تريد أن تتعارض الصفوف الجديدة، لذا استخدم المعرفات الفريدة العمومية (GUIDs) باعتبارها PK - يمكن أن يتم النسخ المتماثل في كلا الاتجاهين.

نحن نقوم بتكرار جداول التزايد التلقائي طوال الوقت، ولكنها عملية نسخ متماثل صارمة للسيد/التابع حيث تتم كتابة البيانات إلى السيد فقط.

نصائح أخرى

كلمه واحده:دمج

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

إذا أخذت في الاعتبار ما يحدث عندما يتم نسخ خادمين مع بعضهما البعض ويتم إضافة البيانات إليهما بين المزامنة، تصبح المشكلة واضحة:

Time  Server  NewID
001   A       1
002   A       2
003 <sync of server A and B>
004   A       3
005   B       3
006 <sync of server A and B>

<---سجلان مختلفان لهما نفس المعرف الآن، لذلك هناك تعارض!

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