قراءة فقط وظيفة البحث. الإجراءات المخزنة أو Iqueryable مع Pocos و EF 4.0

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

سؤال

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

لقد كنا ننظر إلى طرق مختلفة للقيام بذلك والتي تتناسب مع الهندسة المعمارية الخاصة بنا.

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

الطريقة الثانية هي استخدام LINQ لإثبات أو كيان SQL مع Framework Entity 4.0 وإنشاء الاستعلام في التعليمات البرمجية عبر طبقةنا المفاهيمية وسوف تملك كائنات Poco عبر IQueryable. هذا لديه مزايا لنا من:

  • التجريد: نحن نستخدم EF في أماكن أخرى في التطبيق حتى نود البحث في النموذج المستخرج إذا كان ذلك ممكنا.
  • نوع السلامة ويمكننا سلسلة المرشحات على iqueryable أن تفعل نظيفة ما نريد القيام به بطريقة كائن

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

سنكون ممتنا لسماع فكر الناس وتوصياتهم بشأن هذا .... نحن جديدون في الكثير من هذه التقنيات، لذلك أود أن سماع تجارب الشعوب.

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

المحلول

لقد قمت ببعض اختبارات الأداء واستخدام إجراء مخزن في EF4.0 ملء كيان أو نوع معقد متطابق تقريبا في الأداء إلى SP يمكن الوصول إليها عبر ADO.NET، لذلك سنحاول هذه الطريقة. كان استخدام EF المدمج في الاستعلام حوالي ضعف بطء، لذلك نحن نستخدم SPS في هذا الوضع الحرج لهذا الأداء.

نصائح أخرى

قلت الهدف النهائي هو الأداء. هذا يعني أن ADO.NET و SQL مستقيم لي. إضافة EF أعلى كمية كبيرة من النفقات العامة لشيء لا يحتاج إلى أي تتبع الدولة، ولا توجد قدرة تحديث، ولن تستخدم جميع النتائج.

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

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

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