سؤال

أنا أعمل على خدمة الإنترنت في هذه اللحظة و هناك احتمال أن عاد النتائج يمكن أن تكون كبيرة جدا ( > 5mb).

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

  1. إذا تم فقد الاتصال ، كامل resultset سوف يكون مجدد و إرسالها مرة أخرى.هناك على أية حال أنا يمكن أن تفعل أي نوع من "استئناف" إذا تم فقد الاتصال أو تعيين ؟

  2. هو إرسال مجموعة نتائج كبيرة حتى مناسبة ؟ سيكون من الأفضل لتنفيذ بعض نوع من "الترحيل" حيث resultset يتم إنشاؤها وتخزينها على الخادم و العميل ثم يمكن تحميل أجزاء من resultset في كميات صغيرة وإعادة تجميع مجموعة في النهاية ؟

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

المحلول

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

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

ترحيل النهج

في تجربتي, باستخدام ترحيل النهج المناسب عندما يحتاج العميل الوصول بسرعة إلى حد معقول الحجم قطع من مجموعة النتائج مشابهة الصفحات في نتائج البحث.الاعتبارات هنا عموما الثرثرة من بروتوكول التخزين المؤقت بالكامل نتيجة تعيين بين العميل صفحة طلبات و/أو المعالجة الوقت المستغرق لإنشاء صفحة النتائج.

تخزين واسترجاع

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

ضخمة دفع

ضخمة دفع نهج يكاد يكون من المؤكد معيبة.حتى إذا كان العميل يحتاج كل هذه المعلومات فإنه يحتاج إلى أن تكون دفعت متجانسة نتيجة مجموعة, أنصح اتخاذ نهج WS-ReliableMessaging (إما مباشرة أو عن طريق الخاصة بك نسخة مبسطة) و chunking النتائج الخاصة بك.عند القيام بذلك يمكنك

  1. التأكد من أن القطع تصل إلى العميل
  2. يمكن تجاهل قطعة بمجرد الحصول على وصل استلام من العميل
  3. يمكن أن تقلل من القضايا المحتملة مع استهلاك الذاكرة من الحاجة إلى الاحتفاظ 5MB من XML DOM, أو ما في الذاكرة (على افتراض أن كنت لا معالجة النتائج في الجري نحو) على الخادم و العميل الجانبين.

كما قال آخرون رغم أن, لا تفعل أي شيء حتى تعرف النتيجة الخاص بك تعيين الحجم, كيف يتم إنشاء والأداء العام إلى القضايا الفعلية.

نصائح أخرى

لا بجد القانون ضد 5 Mb نتيجة تعيين الحجم.أكثر من 400 Mb يمكن من الصعب إرسال.

سوف تحصل تلقائيا على المتزامن معالجات (منذ كنت تستخدم .صافي)

تنفيذ نوعا من "الترحيل" حيث resultset يتم إنشاؤها وتخزينها على الخادم و العميل ثم تحميل قطع من resultset في كميات صغيرة و إعادة تجميع تعيين في نهايتها

هذا يحدث بالفعل-ماذا يسمى tcp/ip ;-) إعادة تنفيذ هذا يمكن أن يكون مبالغة.

وبالمثل --

كامل resultset سوف يكون مجدد وإرسالها مرة أخرى

إذا كان MS-SQL, على سبيل المثال أن يتم توليد معظم resultset -- ثم إعادة توليد أنه سيتم الاستفادة من بعض الضمني cacheing في SQL Server و الأجيال اللاحقة سوف يكون أسرع.

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

أنا لا أوافق إلى حد ما مع secretGeek تعليق:

هذا يحدث بالفعل-ماذا يسمى tcp/ip ;-) إعادة تنفيذ هذا يمكن أن يكون مبالغة.

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

هذا يجعل المعطف, أسرع واجهة المستخدم (من وجهة نظر المستخدم) ، ولكن عليك أن تقييم ما إذا كان الجهد الإضافي سوف يكون من المفيد...لأنني لا أعتقد أنه سيكون مبلغا ضئيلا من العمل.

يبدو أنك قد تكون مهتمة في الحل الذي يضيف "تشغيل" رقم قياسي " و "النهائي رقم قياسي' المعلمة الويب الخاص بك طريقة.(أو 'صفحة رقم' و 'النتائج في الصفحة')

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

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

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