واجهة برمجة تطبيقات Java Database Connectivity (JDBC) عبارة عن سلسلة من الواجهات التي تسمح لمبرمجي Java بالوصول إلى قواعد البيانات. واجهات المطورين المختلفين ليست متماثلة تمامًا. بعد استخدام JDBC من Oracle لسنوات عديدة، اكتسبت العديد من المهارات التي تمكننا من الاستفادة بشكل أفضل من أداء النظام وتحقيق المزيد من الوظائف.
1. استخدام برامج التشغيل الرقيقة في تطوير برمجيات العميل
فيما يتعلق بتطوير برمجيات Java، توفر قاعدة بيانات Oracle أربعة أنواع من برامج التشغيل، اثنان منها يستخدمان لبرامج العميل مثل البرامج التطبيقية والتطبيقات الصغيرة والخوادم، ويستخدم الاثنان الآخران لبرامج التشغيل. برامج العميل مثل البرامج التطبيقية والتطبيقات الصغيرة والبرامج من جانب الخادم مثل إجراءات Java المخزنة في قواعد البيانات. في تطوير البرامج من جانب العميل، يمكننا اختيار برنامج تشغيل 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. استخدم كائنات PreparationStatement لتحسين الكفاءة العامة لقاعدة البيانات.
عند استخدام كائنات PreparationStatement لتنفيذ أوامر SQL، يتم تحليل الأوامر وتجميعها بواسطة قاعدة البيانات، ثم وضعها في المخزن المؤقت للأوامر. بعد ذلك، عندما يتم تنفيذ نفس كائن PreparationStatement، سيتم تحليله مرة أخرى، ولكن لن يتم تجميعه مرة أخرى. تم العثور على الأوامر المترجمة مسبقًا في المخزن المؤقت ويمكن إعادة استخدامها. في التطبيقات على مستوى المؤسسة التي تضم عددًا كبيرًا من المستخدمين، غالبًا ما يتم تنفيذ نفس أوامر SQL بشكل متكرر. يمكن أن يؤدي تقليل عدد المجموعات الناتجة عن استخدام كائنات PreparationStatement إلى تحسين الأداء العام لقاعدة البيانات. ما لم يستغرق إنشاء مهام PreparationStatement وإعدادها وتنفيذها من جانب العميل وقتًا أطول من مهام البيان، فإنني أوصي باستخدام كائنات PreparationStatement في جميع الحالات باستثناء أوامر SQL الديناميكية.
6. استخدم كائنات PreparationStatement لمعالجة عمليات الإدراج أو التحديث المتكررة على دفعات.
إذا قمت بمعالجة عمليات الإدراج والتحديث على دفعات، فيمكنك تقليل الوقت الذي تتطلبه بشكل كبير. البيان وCallableStatement المقدمان من Oracle لا يدعمان المعالجة المجمعة حقًا. فقط كائن PreparationStatement هو الذي يدعم المعالجة المجمعة. يمكننا اختيار معالجة دفعات JDBC القياسية باستخدام طريقتي addBatch() وexecuteBatch()، أو اختيار طريقة أسرع مملوكة لشركة Oracle من خلال استخدام طريقة setExecuteBatch() الخاصة بكائن PreparationStatement وطريقة ExecuteUpdate() القياسية. لاستخدام آلية التجميع الخاصة بـ Oracle، يمكنك استدعاء setExecuteBatch() كما يلي:
PreparationStatement pstmt3D null;
Try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate()
}
القيمة المحددة عند استدعاء setExecuteBatch () هو الحد الأعلى. عند الوصول إلى هذه القيمة، سيتم تشغيل تنفيذ أمر SQL تلقائيًا، وسيتم إرسال طريقة تنفيذ التحديث () القياسية إلى قاعدة البيانات كعملية مجمعة. يمكننا نقل المهام المجمعة في أي وقت عن طريق استدعاء طريقة sendBatch() لفئة PreparationStatement.
7. استخدم أسلوب محدد موقع Oracle لإدراج كائنات كبيرة (LOB) وتحديثها.
لا تدعم فئة PreparationStatement الخاصة بـ Oracle بشكل كامل معالجة الكائنات الكبيرة مثل BLOB وCLOB، وعلى وجه الخصوص، لا يدعم برنامج التشغيل Thin الإعداد باستخدام setObject(). وأساليب setBinaryStream () لكائن PreparationStatement. لا تدعم قيمة BLOB تعيين قيمة CLOB باستخدام طريقة setCharacterStream (). يمكن فقط للطرق الموجودة في محدد المواقع نفسه الحصول على قيم نوع LOB من قاعدة البيانات. يمكنك استخدام كائنات PreparationStatement لإدراج LOB أو تحديثه، لكنك تحتاج إلى استخدام محدد موقع للحصول على قيمة LOB. بسبب هاتين المشكلتين، أوصي باستخدام طريقة محدد المواقع لإدراج قيم LOB أو تحديثها أو الحصول عليها.
8. استخدم بناء جملة SQL92 لاستدعاء الإجراءات المخزنة
. عند استدعاء الإجراءات المخزنة، يمكننا استخدام SQL92 أو Oracle PL/SQL. لا توجد فوائد عملية لاستخدام Oracle PL/SQL، وسيسبب ذلك مشكلة للمطورين الذين سيحافظون على تطبيقك المستقبل يواجه مشكلة، لذلك أوصي باستخدام SQL92 عند استدعاء الإجراءات المخزنة.
9. استخدم Object SQL لنقل مخطط الكائن إلى قاعدة البيانات
نظرًا لأنه يمكن استخدام قاعدة بيانات Oracle كقاعدة بيانات موجهة للكائنات، يمكنك التفكير في نقل المخطط الموجه للكائنات في التطبيق إلى قاعدة البيانات. يتمثل الأسلوب الحالي في إنشاء وحدات Java ككائنات قاعدة بيانات مقنعة، وتعيين خصائصها في جداول علائقية، ثم إضافة أساليب إلى هذه الوحدات. على الرغم من عدم وجود مشكلة في القيام بذلك في Java، نظرًا لأنه يتم تنفيذ العمليات خارج قاعدة البيانات، لا يمكن للبرامج التطبيقية الأخرى التي تصل إلى قاعدة البيانات الاستفادة من نموذج الكائن. إذا استفدت من تقنية Oracle الموجهة للكائنات، فيمكنك محاكاة بياناتها وعملياتها في قاعدة البيانات عن طريق إنشاء نوع كائن قاعدة بيانات جديد، ثم استخدام أدوات مثل JPublisher لإنشاء فئات Java الخاصة بك. إذا كنت تستخدم هذه الطريقة، فلن تتمكن تطبيقات Java فقط من استخدام نموذج الكائن الخاص بالبرنامج التطبيقي، ولكن يمكن للبرامج التطبيقية الأخرى التي تحتاج إلى مشاركة البيانات والعمليات في التطبيق الخاص بك أيضًا استخدام نموذج الكائن الخاص بالبرنامج التطبيقي.
10. استخدم SQL لإكمال العمليات في قاعدة البيانات،
أهم تجربة أريد تقديمها لك هي الاستفادة الكاملة من نهج SQL الموجه نحو المجموعة لحل احتياجات معالجة قاعدة البيانات، بدلاً من استخدام لغات البرمجة الإجرائية مثل Java.
إذا قام المبرمج بالبحث عن عدة صفوف في جدول واحد، فسيبحث كل صف في النتيجة عن البيانات في جداول أخرى، وأخيرًا، أنشأ المبرمج أوامر تحديث منفصلة لتحديث البيانات في الجدول الأول على دفعات. يمكن إنجاز مهمة مشابهة لهذه في أمر UPDATE باستخدام استعلام فرعي متعدد الأعمدة في جملة المجموعة. لماذا تسمح بتدفق البيانات عبر الإنترنت عندما يمكنك إنجاز المهمة في أمر SQL واحد؟ أوصي بأن يتعلم المستخدمون بعناية كيفية تعظيم قوة SQL.
المؤلف: picva المصدر: مجتمع التكنولوجيا CCID