15

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

  • urorbit

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

Table_NumbersOfMobile
 == id
 == name_caller
 == mobile_caller

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

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

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

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

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

14

إن استعمال فهارس القطع لا يتأثر بحجم البيانات لأن له O1 والكثير من قواعد البيانات تستخدم فهارس لها O هو log n.

ما يعطل ذلك هو وجود أقفال للكتابة فإن سلمت من أقفال الكتابة بطريقة ما (يعود للتطبيق) فإن الأداء سيكون شبه آني.

مما يؤدي إلى إختناق الخادم

إذا كنت تقصد الاختناق الناتج عن إشباع بطاقة الشبكة فهذا لا يحدث إلا نتيجة عيب في هيكلية الشبكة وترتيب الخوادم (مع الأسف هو شائع حتى بين الخبراء) ففي الوضع الطبيعي عندما يكون لديك خادم mysql على نفس الجهاز فأنت إما تتواصل معه عبر قابس socket ملف محلي (يسمى أيضا قابس يونكس) أو عبر واجهة loop back لأنك تستخدم العنوان المحلي (localhost أو 127.0.0.1) وهو منفصل عن منفذ الشبكة الذي تستخدمه للتحدث مع الزوار. المنافذ المحلية منفذ مثل الثقب الأسود تستوعب كل ما يلقى إليها مهما كان كثيفا ففي النهاية لا يوجد أسلاك وحد أعلى للسعة.

إن كان الموقع يعتمد على خادم منفصل لقواعد البيانات فإنه يجب أن يتحدث معه من خلال عنوانه داخل الشبكة المحلية LAN ويفضل عبر منفذ شبكة منفصل (كأن يحتوي على بطاقتي إيثرنت).

المقتل الذي تعيشه الكثير من الخادمات أنها تتحدث مع خدماتها الضرورية وكأنها من طرف ثالث عبر المنفذ الخارجي وعبر مسار طويل مثلا db.example.com فهي إن سلمت من أن تعمل DNS lookup فهي تتحول إلى عنوان خارجي (ليس 127.0.0.1 ولا 192.168. و 172 ولا 10.) بمعنى تظل البيانات تلف في مسار لا يترك خادم إلا ويمر به قبل أن يعود لقاعدة البيانات.

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

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

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

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

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

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

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

اعتقد ان افتراضك خاطئ قليلاً ..

اعتقد ان هذه البرامج تتعامل باستخدام بروتوكول UDP او ربما TCP لكن قطعاً ليس HTTP !

كما ان الاستعلام لا اعتقد انه موجود بلشكل الذي وضعته انت .. ربما يكون موجوداً داخل View تستدعى من خلال Stored Procedure, وليس مدمجاً بلكود.

كما ان 10 الاف استعلام في الثانية ليست مشكلة كبيرة .. خصوصاً اذا استخدمنا ال Grid Computing

حسناً انا اتحدث من خلفية اوراكل, ولا اعتقد ان MySQL ستختلف بشكل كبير .. فلمفهوم واحد.

الـhttp يعمل فوق الـtcp، الـtcp و الـudp بروتوكولات نقل، أغلب بروتوكولات تنقل حزمها باستخدام أحدهما.

جميع الردود تتحدث عن "لا مشكله من الإستعلام السابق !"

ظننت أن هناك تقنيات أخرى يمكن لها تخفيف الضغط

فأنا حاليا أقوم بحفظ البيانات على شكل ملفات يتم تحديثها كل فترة معينه وهناك ملفات ثابته لا تتحدث إلا بأمر معين

توقعت ان تكون خيارات الكاش والملفات هي ماستتحدثون عنه , هل هذه الخيارات أقصد الملفات والكاش غير صحيحه ؟