سؤال

لقد تم إلقاء نظرة على قواعد WF المحرك و NXBRE. ويبدو أنه مثير للاهتمام ولكني غير متأكد من مدى نجاحه في سيناريوهات الحياة الحقيقية.

الشخص الذي أدلى به هو شيء مثل قاعدة الحقائق مع ما بين 10 و 100 مليون حقائق وقواعد مثل:

Object.field <5000 and Object.field> 1000 و ISProperty (Object.field2)

أنا أستخدم C # و .NET.

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

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

المحلول

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

القواعد جزء من محرك القواعد هي مجموعة من الشروط والإجراءات. قاعدة واحدة هي (تقريبا) تعادل وظيفيا لبيان IF - ثم. القوة الحقيقية لمحرك قواعد يضيء بسبب الطبيعة التصريحة للمحرك.

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

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

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

ألق نظرة على مقال مارتن فاولر محركات القواعد. وبعد إنها نظرة عامة قصيرة و (جدا).

هنالك مناقشة طويلة على محرك قواعد عمل Microsoft (MS-BRE) ADN إنه أداء مقارنة مع Jess & Trools. العديد من النقاط التي أثيرت تحت إبطال سبب هذه التقييمات صعبة.

نصائح أخرى

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

هذه القضية تعد معقدة وحجب، وأنا أعلم أن بعض الرجال في MS لا أتفقون معي في هذا (ناقشنا ذلك في كثير من الأحيان كافية)، ولكن هذا هو بلدي تأخذ ذلك.

شيء واحد أن نكون على دراية للغاية هو أن محرك قواعد WF هو أنه ينفذ في الواقع محللها الخاص، ونتيجة لذلك، محدود إلى حد ما في تعبيرها ولديه اعتبارات الأداء لأنها تقوم بتحليل السلسلة إلى حد كبير لتفسير القواعد في التعليمات البرمجية (الإجراءات القابلة للتنفيذ) في وقت التشغيل.

ركضنا 24 مليون اختبار خلال 1500 قاعدة في سبع دقائق باستخدام jboss trools. مع اثنين من JVMS يعمل على خوادم عيد الرتق جميلة. هذا أكثر من ستة وثلاثين مليار اختبارات ليتم تشغيله إذا ركضت كل مجموعة، ومعظم الاختبارات لديها خيارات منطق متعددة فيها. (مثالك لديه ثلاثة خيارات، على سبيل المثال.)

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

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