15

قواعد البيانات ماسيكول وكيفية التعامل مع طلبات ضخمه ؟

  • urorbit

لنفرض أن لدينا برنامج بسيط للموبايل مثل تروكولر , ولنفرض أنهم يستخدموا جدول واحد وهيكلته كالتالي :

Table_NumbersOfMobile
 == id
 == name_caller
 == mobile_caller

عندما يتصل شخص فسيقوم البرنامج بإرسال طلب كالتالي :

الأن في بي أتش بي نفترض أن البحث سيكون بإستعلام سيكول كالتالي : select name_caller from NumbersOfMobile where mobile_calle = '$_GET[caller]' limit 1

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

حسنا ... ماهي إمكانيه تنفذ ذلك ؟ وكيف تتعامل البرامج مع مثل هذه الأمور ؟


تطبيقات الويب والمواقع الكبيرة تستخدم عدت خوادم، وتوزع الإتصالات الواردة بينهم، توزيع الأحمال load balancing. بدل أن يكون عندك خادم واحد يتحمل 100% من الإتصالات، تنشئ 10 خوادم كل واحد يستقبل 10% من الإتصالات.

بعض طرق التقسيم من الأبسط إلى الأكثر تعقيد:

طريقة السيد والخادم master and slave، في أغلب تطبيقات الويب عمليات القراءة تكون أكثر من عملية الكتابة، من بين 10 إتصالات قد تجد واحد يرسل طلب كتابة والباقي قراءة، آلية هذه الطريقة أن يوضع مثلاً 10 خوادم، خادم يسمى السيد يستقبل فقط طلبات الكتابة (insert, update) والخوادم الـ9 الباقية تستخدم فقط للقراءة (select)، إذا أجري تعديل على الخادم فالتعديلات تجرى تلقائياً على الخوادم التابعة. يمكنك إضافة أكثر من سيد وأكثر من خادم.

طريقة المجموعات، يكون لديك مجموعة خوادم (فيها سيد وخادم)، المجموعة الأولى فقط للإتصالات التي تريد قراءة موضوع، والمجوعة الثانية لمن يريد قراءة تعليق والمجموعة الثالثة للملفات وغيرها.

طريقة التجزئة العمودية vertical partitioning، حيث توزع الجدوال بين عدت خوادم، جدول حسابات المستخدمين في خادم وجدول معلوماتهم في آخر.

طريقة التجزئة الأفقية horizontal partitioning، حيث تقسم صفوف الجدوال بين عدت خوادم، مثلاً المقالات التي بين الـid رقم 0 و 1000 في خادم والتي بين 1001 و 2000 في خادم وهكذا.

يمكن إستخدام أكثر من إسلوب للتقسيم.