المتابعون للمدونة

الاثنين، 26 ديسمبر 2016

ملاحظات على الاتصال بخادم سيكويل


ملاحظات على الاتصال بخادم سيكويل:

في التطبيق AuthorBooks_Reader (يمكنك تحميله مع أمثلة الكتاب المشار إليه في نهاية الموضوع) استخدمنا فئة اتصال سيكويل SqlConnection Class للاتصال بقاعدة بيانات الكتب على الخادم المحلي Local Server.

لاحظ أننا فتحنا الاتصال في حدث تحميل النموذج Load ولم نغلقه إلا في حدث إغلاق النموذج FormClosing، ما أتاح لنا استخدام نفس الاتصال لتنفيذ جميع الاستعلامات التي يقوم بها المستخدم.. ورغم أن كائن الاتصال معرف كمتغير موضعي Local Variable في حدث تحميل النموذج، فقد وضعنا مرجعا له في الخاصية Connection الخاصة بكائن الأمر Command Object المعرف على مستوى النموذج، وهذا يجعل كائن الاتصال حيا طالما كان كائن الأمر حيا.. هذا هو السبب في أننا استخدمنا الخاصية Connection الخاصة بكائن الأمر لإغلاق الاتصال في حدث إغلاق النموذج كالتالي:
Cmd.Connection.Close( )

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

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

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

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

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

وستجد كود الاتصال المحسّن في المشروع المسمى AuthorBooks_Reader2 ضمن أمثلة الكتاب. 

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:

 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر