مصدر المقال: منتدى قاعدة البيانات الكاتب: jackma
واجهة برمجة تطبيقات Java Database Connectivity (JDBC) عبارة عن سلسلة من الواجهات التي تسمح لمبرمجي Java بالوصول إلى قواعد البيانات. واجهات المطورين المختلفين ليست متماثلة تمامًا. بعد استخدام JDBC من Oracle لسنوات عديدة، اكتسبت العديد من المهارات التي تمكننا من الاستفادة بشكل أفضل من أداء النظام وتحقيق المزيد من الوظائف.
1. استخدم برنامج Thin driver في تطوير برامج العميل
فيما يتعلق بتطوير برمجيات جافا، توفر قاعدة بيانات أوراكل أربعة أنواع من برامج التشغيل، اثنان لبرامج العميل مثل برامج التطبيقات والتطبيقات الصغيرة والسيرفلتس، والاثنان الآخران للبرامج من جانب الخادم مثل إجراءات جافا المخزنة في قاعدة البيانات. في تطوير البرامج من جانب العميل، يمكننا اختيار برنامج تشغيل OCI أو برنامج تشغيل Thin. يستخدم برنامج تشغيل OCI واجهة Java Localization Interface (JNI) للتواصل مع قاعدة البيانات من خلال برنامج عميل Oracle. برنامج التشغيل Thin هو برنامج تشغيل Java خالص يتصل مباشرة بقاعدة البيانات. للحصول على أقصى قدر من الأداء، توصي Oracle باستخدام برامج تشغيل OCI في تطوير برامج العميل، ويبدو أن هذا صحيح. لكنني أوصي باستخدام برنامج التشغيل Thin، لأنه من خلال العديد من الاختبارات وجد أن أداء برنامج التشغيل Thin يفوق أداء برنامج تشغيل OCI في الظروف العادية.
2. قم بإيقاف تشغيل وظيفة الإرسال التلقائي لتحسين أداء النظام
عند إنشاء اتصال بقاعدة البيانات لأول مرة، يكون الاتصال في وضع الالتزام التلقائي بشكل افتراضي. للحصول على أداء أفضل، يمكنك إيقاف تشغيل ميزة الالتزام التلقائي عن طريق استدعاء الأسلوب setAutoCommit() الخاص بفئة الاتصال باستخدام معلمة Boolean false، كما هو موضح أدناه:
conn.setAutoCommit(false);
تجدر الإشارة إلى أنه بمجرد إيقاف تشغيل وظيفة الالتزام التلقائي، نحتاج إلى إدارة المعاملة يدويًا عن طريق استدعاء طريقتي الالتزام () والتراجع () لفئة الاتصال.
3. استخدم كائنات البيان في SQL الديناميكي أو أوامر محدودة الوقت
عند تنفيذ أوامر SQL، لدينا خياران: يمكنك استخدام كائنات PreparationStatement أو كائنات البيان. بغض النظر عن عدد المرات التي تستخدم فيها نفس أمر SQL، فإن PreparedStatement يقوم بتوزيعه وتجميعه مرة واحدة فقط. عند استخدام كائن البيان، في كل مرة يتم فيها تنفيذ أمر SQL، يتم تحليله وتجميعه. قد يجعلك هذا تعتقد أن استخدام كائنات PreparationStatement أسرع من استخدام كائنات البيان. ومع ذلك، فإن الاختبار الذي أجريته يوضح أن هذا ليس هو الحال في برنامج العميل. لذلك، في عمليات SQL محدودة الوقت، ما لم تتم معالجة أوامر SQL على دفعات، يجب أن نأخذ في الاعتبار استخدام كائنات البيان.
بالإضافة إلى ذلك، فإن استخدام كائنات البيان يجعل كتابة أوامر SQL الديناميكية أسهل لأنه يمكننا ربط السلاسل معًا لإنشاء أمر SQL صالح. لذلك، أعتقد أن كائن البيان يمكن أن يجعل إنشاء وتنفيذ أوامر SQL الديناميكية أسهل.
4. استخدم الوظائف المساعدة لتنسيق أوامر SQL الديناميكية
عند إنشاء أوامر SQL ديناميكية يتم تنفيذها باستخدام كائنات البيان، نحتاج إلى التعامل مع بعض مشكلات التنسيق. على سبيل المثال، إذا أردنا إنشاء أمر SQL يقوم بإدراج اسم O'Reilly في جدول، فيجب علينا استبدال علامة "'" في O'Reilly بعلامتين متتاليتين "''". أفضل طريقة للقيام بذلك هي إنشاء أسلوب مساعد ينفذ عملية الاستبدال، ثم استخدام الأسلوب المساعد الذي تم إنشاؤه عندما يتم التعبير عن سلسلة الاتصال كأمر SQL باستخدام صيغة. وبالمثل، يمكننا جعل الأسلوب المساعد يقبل قيمة التاريخ ثم نطلب منه إخراج تعبير سلسلة بناءً على وظيفة to_date() الخاصة بـ Oracle.
5. استخدم كائنات ReadyStatement لتحسين الكفاءة العامة لقاعدة البيانات
عند استخدام كائن PreparationStatement لتنفيذ أمر SQL، يتم تحليل الأمر وتجميعه بواسطة قاعدة البيانات، ثم يتم وضعه في المخزن المؤقت للأوامر. بعد ذلك، عندما يتم تنفيذ نفس كائن PreparationStatement، سيتم تحليله مرة أخرى، ولكن لن يتم تجميعه مرة أخرى. تم العثور على الأوامر المترجمة مسبقًا في المخزن المؤقت ويمكن إعادة استخدامها. في التطبيقات على مستوى المؤسسة التي تضم عددًا كبيرًا من المستخدمين، غالبًا ما يتم تنفيذ نفس أوامر SQL بشكل متكرر. يمكن أن يؤدي تقليل عدد المجموعات الناتجة عن استخدام كائنات PreparationStatement إلى تحسين الأداء العام لقاعدة البيانات. ما لم يستغرق إنشاء مهام PreparationStatement وإعدادها وتنفيذها من جانب العميل وقتًا أطول من مهام البيان، فإنني أوصي باستخدام كائنات PreparationStatement في جميع الحالات باستثناء أوامر SQL الديناميكية.
6. استخدم كائنات ReadyStatement في المعالجة المجمعة لعمليات الإدراج أو التحديث المتكررة <br /> <br /> إذا تمت معالجة عمليات الإدراج والتحديث على دفعات، فيمكن تقليل الوقت المطلوب لها بشكل كبير. البيان وCallableStatement المقدمان من Oracle لا يدعمان المعالجة المجمعة حقًا. فقط كائن PreparationStatement هو الذي يدعم المعالجة المجمعة. يمكننا اختيار معالجة دفعات JDBC القياسية باستخدام طريقتي addBatch() وexecuteBatch()، أو اختيار طريقة أسرع مملوكة لشركة Oracle من خلال استخدام طريقة setExecuteBatch() الخاصة بكائن PreparationStatement وطريقة ExecuteUpdate() القياسية. لاستخدام آلية التجميع الخاصة بشركة Oracle، يمكنك استدعاء setExecuteBatch() كما هو موضح أدناه:
PreparedStatement pstmt3D null;
يحاول {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}