هل يدعم أوراكل جانب الخادم المؤشرات للتدرج عبر JDBC؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

ويعمل حاليا في نشر نظام تخطيط موارد المؤسسات أوفبيز القائمة، ونحن قد وصلنا إلى هذه المشكلة التالية: بعض من قانون الإطار يدعو resultSet.last () لمعرفة مجموع الصفوف من resultset و. باستخدام برنامج تشغيل V11 أوراكل JDBC وV10، فإنه يحاول تخزين كافة الصفوف في ذاكرة العميل، تحطمها JVM لأنه لم يكن لديك مساحة كومة بما فيه الكفاية.

وبعد البحث، يبدو أن المشكلة تكون أن JDBC أوراكل تنفذ للتمرير المؤشر في جانب العميل، بدلا من الخادم، من خلال استخدام ذاكرة التخزين المؤقت. باستخدام برنامج تشغيل datadirect، يتم حل هذه المسألة، ولكن يبدو أن الدعوة إلى resultset.last () يأخذ أكثر من اللازم لإكمال، وبالتالي فإن تطبيق الخادم إحباط الصفقة

هل هناك أي طريقة لimplemente المؤشرات للتمرير عبر جدبك في أوراكل دون اللجوء إلى سائق datadirect؟

و ما هي أسرع طريقة لمعرفة طول resultset ونظرا ؟؟

وشكرا مقدما إسماعيل

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

المحلول

و"ما هي اسرع وسيلة لمعرفة طول resultset ونظرا" الطريقة الوحيدة لمعرفة الحقيقة هي أن يعول عليها الجميع. كنت تريد أن تعرف كم عدد "لSMITH هي في دفتر الهاتف. كنت تعول عليها. إذا كانت مجموعة نتائج صغير، ووصل بسرعة في، أنها ليست مشكلة. سوف EG لا يكون هناك الكثير من Gandalfs في دفتر الهاتف، وربما كنت ترغب في الحصول على كل منهم على أي حال.

إذا هو مجموعة نتائج كبيرة، قد تكون قادرة على القيام تقدير، على الرغم من أن هذا ليس بشكل عام وهو ما SQL مصممة بشكل جيد ل.

لتجنب التخزين المؤقت نتيجة كامل تعيين على العميل، يمكنك أن تجرب

select id, count(1) over () n from junk;

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

وحلا وسطا هو الحصول المائة الأولى (أو ألف) الصفوف، ولا تقلق حول ترقيم الصفحات أبعد من ذلك.

نصائح أخرى

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

وأفضل طريقة في رأيي هو مختارة فقط الصفحة التي تريد على الشاشة (+1 لتحديد أن المرحلة التالية موجود) على سبيل المثال الصفوف من 21 إلى 41. ويكون زر آخر (نموذج التطبيقي) لحساب كل منهم في (نادرة) حالة شخص يحتاج إليها.

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