المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [mysql] الطريقة المثالية للاستخدامها ومرعاتها



said
10-31-2013, بتوقيت غرينيتش 10:19 PM
http://www.dzbatna.com/images/icons/icon16.gif [mysql] ط§ظ„ط·ط±ظٹظ‚ط© ط§ظ„ظ…ط«ط§ظ„ظٹط© ظ„ظ„ط§ط³طھط®ط¯ط§ظ…ظ‡ط§ ظˆظ…ط±ط¹ط§طھظ‡ط§ (http://www.dzbatna.com/t23244/)




السلام عليكم

بصراحة ياخواني من فترة وأنا اقوم بتنزيل بعض الاسكربتات العربية و الاجنبية ومشاهدة طريقة تعامل بعض المبرمجين لقواعد البيانات من نوع MYSQL ... والصراحة استغربت كثيرا ولازلت استغرب من عدم اهتمام المبرمج في طريقة تحديد المتطلبات والقياسات الخاصة بالتخزين في قاعدة بيانات برنامجه ..
مما يجعل احجامها ومقايسها خاطئة ولا تأدي الغرض المطلوب منها بغض النظر عن اسلوب البرمجه وحتى لو كانت صحيحة ...

لذلك قررة ان اضع هذا الموضوع علا وعسى يستفيد منه اخواننا المبرمجين وتنفعهم في تحسين ادارء برامجهم ..
وإن شاء الله ما راح اطول في الكلام واحاول اختصر قدر الامكان ....

كما هو معروف ان اي قاعدة بيانات بما فيها mysql تطلب منك وضع مقايس خاصة بتخزينك للبيانات مثل نوع العمود المطلوبة INT,char,text مثلا ... وكل واحدة من هذي الاعمدة لها مقياس خاص بها مثل int مقاساتها smallint,mediumint,bigint ... الخ وكل من هذه المقايس لها حجم مخصص لها
مثل:-
TINYINT=1 BYTES
SMALLINT= 2 BYTES
MEDIUMINT=3 BYTES
BIGINT=8 BYTES
وهكذا بالنسبة لباقي المقاسات ...

قد يرى البعض ان هذا الامر بسيط ولا يحتاج حتى التفكير به (تحمل هم شويت بايتات لا ودت ولا جابت) ويكفي مثلا ان اعرف ان smallint لتخزين الارقام الصغيرة من سالب –32768 الى موجب 32767 هذا بعلامة وبدون علامة (UNSIGNED) ستكون من صفر الى 65535 ...
أو مثلا يأتيك واحد ويقولك ماتفرق عندي بشي اخليه INT كله واحد في النهاية بتم تخزين الرقم ولو كان صغير أو كبير ...

وهنا اقول له لو فكرة قليلا لوجدة ان اهمالك لقياسات التخزين ممكن ان يضر ببرنامج بصورة مباشرة أو غير مباشرة .. لغيرت رائك بذلك ولتزمت بهذه المعاير إذا كنت تهتم بنجاح برامجك ...

كيف ؟؟

نبدء بكيف ... وبعطي مثال وهذا المثال بسيط عن سؤ اختيار قياسات التخزين الملائمة في MYSQL ...
وهي جدول في قاعدة تحتوي على 5 اعمدة خاصة بالارقام العادية والصغيرة
وطبعا صاحبنا المبرمج حدد لها كلها INT بما انها للارقام فقط ...

ملاحظة انا اعرف ان الميجا = 1024 كيلو و الكيلو = 1024 بايت لكن هني وللتوضيح فقط راح نقول انه 1000 فقط يعني النتائج راح تكون مختلفة بشكل بسيط .. وهذا حتى يمكن للكل الاستيعاب

الـINT في mysql يخصص مساحة تخزين 4 بايت للعمود ...
يعني لو فرضنا ان لديك في هذا الجدول 250.000 مأتين وخمسين الف صف (لاحظ اني ما قلت مليون فقط 250 الف)
ومثلا قام احد المستخدمين بالبحث بها فانه سيستهلك من عمليت اجراء البحث من الذاكرة (RAM) خمسة ميجا



4بايت×250.000صف=1.000.000 بايت (1ميجا) لكل عمود
1.000.000بايت×5اعمدة=5.000.000 بايت (5ميجا) لكل الاعمدة الخمسة

شووووف البايت وين وصل وهذا لشخص واحد ماذا لو كان 4 اشخاص في نفس الوقت (لاحظ اني ما قلت 40 او 400 شخص فقط 4 اشخاص)
راح يكون النتيجة:- 5.000.000بايت×4اشخاص=20.000.000 بايت (20ميجا)

اليس هذا كارثة لبرنامجك ... الا يسبب بطئ او يعلق وما يتابع البرنامج المطلوب منه اوليست مشكلة عندما تظهر رسالة مثلا في حال نقل نسخة منه او عمل طلب له حتى لو برمجته قوية وصحيحة مثل رسالة
Fatal error: Allowed memory size of 15000000 bytes exhausted
اذا كان المخصص هو 15 ميجا مثلا والجدول اكبر من هذا ..

بينما لو قمت باختيار المقاسات الصحيحة مثل SMALLINT
الـ SMALLINT في mysql يخصص مساحة تخزين 2 بايت للعمود

اي ان نفس المعادلة السابقة ستكون نتائجه على 4 اشخاص 10 ميجا يعني نصف ما استهلكه الاول ولا بتكون هناك مشكلة استهلاك الميموري او يقفل ...

هذا بالنسبة للارقام فما بالكم لو دخلت بباقي البلاوي الزرقة مثل char و varchar
الـchar يخزن بعدد الارقام المدخلة بشرط ما يزيد عن 255
char(5) = راح ياخذ 5 بايت
اما الـvarchar هذا بعدد الحروف المضافة + 1 بايت بشرط ما يزيد عن الرقم المخصص له ولا يكون اكثر من 255
varchar(5) = لو تم ادخال مثلا abdc راح يخزن 5 بايت 4 حق الحروف + 1 بايت


الخلاصة عزيزي المبرمج :-------
إذا كنت في صدد عمل مشروع كبير يتطلب منك قاعدة بيانات ضخمة قبل ان تضع اكوادك وتجهز قواعدك تأكد من متطلباتك والقياسات التي تحتاجها في قاعدة بياناتك ولا تحاول ان تخصص اكثر من ما تحتاجه من القاعدة حتى لا يتسبب لك ذلك بمشاكل بسبب اخذ مساحة كبيرة على الفاضي
يعني مثلا لو كان عندك عمود رقمي من اجل وضع رقم احادي او مزدوج لا تخصص له smallint بالافضل لك هو TINYINT على سبيل المثال
SMALLINT= 2 bytes
TINYINT= 1 bytes
فمافي داعي تضيع 2 بايت في شي ممكن تضعه في 1 بايت لانه ممكن راح ياثر في الاحجام الكبيرة ويضاعف الحجم على الفاضي ... وانت محتاج مثلا هذا العمود لرقم مزدوج يعني من 10 إلى 99 ...

وفي النهاية اضع لكم المتطلبات والقياسات كما وضعتها موقع MYSQL والتي يجب على كل مستخدم لها مراعات المعاير الخاصة بها

هذه نظرة عامة الانواع العددية تقدر تتعرف منها على نوع المناسب للارقامك في القاعدة
http://dev.mysql.com/doc/mysql/en/nu...-overview.html (http://dev.mysql.com/doc/mysql/en/numeric-type-overview.html)

وهذه متطلبات التخزين المخصصه والتي يجب مراعتها وعدم استهلاك اكثر من حاجتك لها
http://dev.mysql.com/doc/mysql/en/st...uirements.html (http://dev.mysql.com/doc/mysql/en/storage-requirements.html)

وإلي يستخدمو قواعد بيانات اخرى غير MYSQL عليهم ان يراجعو التعليمات الخاصة بالقاعدة إلي يستخدمونها ويسألو بخصوص القياسات المناسبة والاحجام إلي تخصصه لهم القاعدة وإلي يحتاجونها

وأرجو اني اكون لخصت الكلام وعطيتكم الزبدة منها ... والاهم تكونو فهمتوني
مع تمنياتي لكم بالتوفيق والنجاح في اعمالكم ...

وشكرا






ألعاب الأندرويد مجانا و حصريا (http://www.apotox.info/forum)




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى