سؤال

أنا بحاجة إلى توليد فريدة من نوعها ، الإضافية رقمية الصفقة id لكل طلب إجراء معين XML RPC.هذه الأرقام تحتاج فقط إلى أن تكون فريدة من نوعها في جميع أنحاء بلدي المجال ولكن سيتم إنشاؤها على أجهزة متعددة.

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

أي الأفكار سيكون موضع تقدير.

تحرير:ماذا لو كل معاملة معرف فقط يجب أن يكون أكبر من الطلب السابق ؟

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

المحلول

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

إذا كانوا بحاجة إلى أن تكون تدريجية ، أي شكل من أشكال الزمني لن تكون مضمونة فريدة من نوعها.

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

يمكنك استخدام زوج من معرفات الأجهزة + تدريجي الطوابع?وهذا من شأنه أن يجعل كل آلة محددة هويات تدريجية ، ولكن ليس بالضرورة أن تكون فريدة من نوعها عبر كامل المجال.

---- EDIT -----

لا أعتقد أن استخدام أي شكل من الطابع الزمني هو الذهاب إلى العمل بالنسبة لك ، 2 الأسباب.

أولا, أنت لن تكون قادرة على ضمان أن 2 المواضيع على آلات مختلفة لن تحاول أن تحدد في نفس الوقت ، بغض النظر عن ما حل مؤقت يمكنك استخدامها.في قرار عالية بما يكفي ، فإنه من غير المرجح, ولكن غير مضمونة.

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

نصائح أخرى

هذه مشكلة صعبة جدا, خاصة إذا كنت لا ترغب في إنشاء أداء عنق الزجاجة.أنت تقول أن معرفات تحتاج إلى أن تكون 'إضافية' و 'الرقمية' - هو أن أعمال ملموسة القيد ، أو تلك التي توجد في بعض الغرض ؟

إذا هذه ليست لزم الأمر يمكنك استخدام UUIDs ، وهو الأكثر شيوعا منصات المكتبات.أنها تسمح لك لتوليد العديد من (الملايين!) من معرفات في قصيرة جدا timespans و تكون مريحة جدا مع أي اصطدام.المادة ذات الصلة في ويكيبيديا المطالبات:

وبعبارة أخرى إلا بعد توليد 1 مليار UUIDs كل ثانية 100 سنة القادمة ، واحتمال خلق واحدة فقط تكون مكررة حوالي 50٪.

إذا قمت بإزالة هذين من الاحتياجات الخاصة بك ، يمكنك استخدام GUID.

أنا لا أرى كيف يمكنك تنفيذ تدريجي عبر عمليات متعددة دون نوعا من البيانات المشتركة.

إذا كنت تستهدف منصة ويندوز ، هل جربت متشابكة API ?

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

أو يكون كل موضوع "الاحتياطي" ألف (أو مليون أو مليار دولار) معاملة معرفات وتسليمها في وقت واحد ، و "الاحتياطي" حفنة القادمة عندما تنفد.لا تزال لا حقا تدريجي.

أنا مع GUID الحشد ، ولكن إذا كان ذلك غير ممكن يمكن النظر في استخدام db4o أو SQL Lite أكثر من الوزن الثقيل قاعدة البيانات ؟

لو كل عميل يمكن أن تتبع من تلقاء نفسها "id المقبل" ، ثم يمكن أن تتحدث إلى sentral الخادم والحصول على مجموعة من هوية, ربما 1000 في وقت واحد.مرة واحدة يتم تشغيل عميل من هوية, وسوف تضطر إلى التحدث إلى الخادم مرة أخرى.

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

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