طريقة فعالة لتوليد أرقام متتابعة على اتحادات SQL Azure

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

سؤال

بالنظر إلى أن اتحادات SQL Azure لا تدعم خاصية الهوية أو التسلسلات، فما هي طريقة فعالة لتوليد أرقام متتالية عند إدراج السجلات؟

على سبيل المثال، بالنظر إلى جدول مع هذه الأعمدة: giveacodicetagpre.

لكل طلب إدراج مستأجر معين، يجب زيادة الطلب. على سبيل المثال، بالنسبة للمشدة، سيكون OrtherID 1 و 2 و 3 ... وللأمينيد D OrderID سيكون أيضا 1 و 2 و 3 ... في تسلسل مستقل. من الناحية المثالية يجب أن يكون هناك فجوات.

tenantid وترتيبها هي مكونات المفتاح الأساسي. يتم تحديد قيمها من قبل التطبيق ولا يرتبط بمسألة توليد التسلسلات؛ يرويها فقط لديه الرقم التسلسلي مع معنى الأعمال. أيضا، Tenantid هو مفتاح التوزيع للاتحاد.

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

هل سيكون ذلك النهج الأمثل بالنظر إلى التوسع أو الخلاف أو قفل الموارد؟ أي حيل مفيدة أخرى، معتبرا قيود اتحادات SQL Azure؟

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

المحلول

هنا هي 2 أفكار إضافية.

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

ثم لديك نهج الرجل الفقراء ... الذي عندما تتماشى النجوم أنفسهم جيدا، قد يكون كل ما تحتاجه. إذا كنت ترغب في الحصول على نهج التزامن متفائل، فحاول استخدام الرقم التالي أثناء إدراج (حدد THE MAX OrderNumber First for A Tenantid وترتيب معين)، ثم قم بإجراء الإدراج. إذا فشل الإدراج (نظرا لأنك أضفت فهرس فريد من نوعه على Tenantid، فيرجى مرتبة هذا الغرض)، فما عليك سوى إضافة 1 إلى To OrderNumber. القضية الحقيقية هنا هي تواتر المحاولات وغلبية هذا النهج الفاشلة. إذا كانت لديك عملية تجارية مبسطة نسبيا، فقد تفشل ذلك في الواقع؛ إذا كنت قد أضافت الطلبات باستمرار من طرق متعددة، فقد يكون هذا نهجا غير مقبول.

نصائح أخرى

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

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