سؤال

في السيناريو التالي:

1 قاعدة بيانات 4 خوادم الويب

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

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

المحلول

استخدم UUID (http://www.ietf.org/rfc/rfc4122.txt).التصادمات غير محتملة، ويمكن التعامل معها عند حدوثها عن طريق إعادة إنشاء UUID جديد، أو يمكن منعها عن طريق سلسلة معرف فريد لكل خادم (مثل عنوان mac):-

StringBuilder sb = new StringBuilder(UUID.randomUUID());
InetAddress address = InetAddress.getLocalHost();
String uid = sb.append(NetworkInterface.getByInetAddress(address).getHardwareAddress());

نصائح أخرى

ويمكنك استخدام UUID:

import java.util.UUID;        

UUID uuid = UUID.randomUUID();
System.out.println(uuid.toString());

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

ما هو نظام DB الذي تستخدمه؟ هل يعرف التطبيق الخادم الذي يجعل الطلب؟ هل ترك DB تقرر المفتاح، أو وضع ذلك في التعليمات البرمجية؟

ويمكن أن تكون بسيطة مثل استخدام السيارات زيادة مع بادئة أو الحقل 2ND مشيرا إلى الخادم الذي طلب المفتاح.

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

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

  1. استخدم تسلسلاً، ثم قم بإنشاء رقم عشوائي، وقم بإنشاء رقم الحساب من مزيج من الاثنين باستخدام خوارزمية بحيث لا يمكن لرقمين تسلسليين مختلفين أن يعطيا نفس الرقم النهائي.على سبيل المثال، خوارزمية بسيطة ستكون:خذ الرقم التسلسلي التالي، واضربه في 12345678، وأنشئ رقمًا عشوائيًا من 0 إلى 12345678-1، ثم أضف الاثنين معًا.

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

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

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