بسم الله الرمن الرحيم
السلام عليكم ورحمة الله وبركاته
أحببت أن أقدم درس بسيط عن دورة حياة تعليمة السكول وكيف يتم تنفيذها لكي تكون الأمور واضحة للمبرمجين
أولا : معلومات عامة عن الداتابيز
يوجد العديد من أنظمة قواعد البيانات DBMS تتنافس فيما بينها وتختلف من حيث القوة والسرعة في التنفيذ وقابليتها للتوسع والتقسيم إلخ
هناك بنود تم وضعها عالمياً لم يجب أن تكون عليه أنظمة قواعد البيانات بشكل نظري أو المطلوب أن تكون عليه
هذه البنود لا يوجد نظام DBMS في العالم قد وفرها كاملة بنسبة 100%
إلا أني وحسب ما سمعت من دكتور كانت رسالة الدكتراة له في الداتا بيز
قال لي أن أكثر من حقق تلك البنود كانت شركة أوراكل
عموما هذا ليس مجال حديثنا فالبنود الغير متوفرة في انظمة الداتا بيز الأخري هي أمور لا نستخدمها غالباً في مشاريعنا البسيطة أو المتوسطة أو ربما حتي بعض المشاريع الكبيرة منها
============================================
ثانياً : معلومات عامة عن الحاسوب
يتكون الحاسوب من لوحة أم تحوي جسرين
جسر شمالي يربط بين الذاكرة والمعالج
وجسر جنوبي يربط بين المعالج ومكونات الحاسب من كارت الشاشة وكروت ال pc وغيرها
يتعامل المعالج مع عدة أنظمة من المخزنات
أكثرهم بطئاً هو الهارد ديسك
وأكثر سرعة هي ذاكرة الكاش المخبئة الموجودة داخل المعالج
فيكون حسب السرعة من الأبطأ للأسرع هكذا
الهارديسك
الذاكرة ram
الذاكرة المخبئة
حتي الذاكرة المخبئة يم في كلاً من شركتي إنتل و amd تقسيمها لمرحتلين أو 3
L1.L2 في حالي amd وإنتل ما قبل ال core i7
تكون L1 أكثر سرعة بكثير من L2 ولكنها صغيرة جدا وتكون أعلي في تكلفة التصنيع
ثم L2 وهي الكاش ميمور اللي يعلن عنه واللي يحفظه الجميع لكل معالج ( 4 ميجا أو 8 إلخ )
هذه الذاكرة المخبئة تكون مشتركة لكل أنوية المعالج الداخلية في حالة إنتل ولكنها تكون مقسمة لكل نواة في حالة AMD
حينما يكون هناك بيان سيتعامل معه المعالج وهو موجود علي الهارد ديسك ينقل المعالج بيئة التشغيل الخاصة به للذاكرة ويتعامل معه من خلال الذاكرة
فمثلاً لو فتحت الفوتوشوب فأنت بذلك تأخذ وقت في البداية هو وقت إقلاع الفوتوشوف وهو يحمل ملفاته التنفيذة للذاكرة
بعد ذلك يبدأ المعالج بالتعامل مع تلك الملفات التنفيذية المخزنة في الذاكرة
ولو تركته لفترة طويلة يقوم نظام التشغيل آليا بنقل تلك الملفات التنفيذية للذاكرة الإفتراضية علي الهارد ديسك والتي تسمي swap في اللينوكس وتكون موجود في لوحة whm في صفحة عرض ال load وغيره وتسمي في الويندوز page file موجود داخل ال c ويتم ذلك لتحرير الذاكرة لعمليات أخري تكثر أنت التعامل معها
حينما تذهب لعرض الفوتوشوب المفتوح لديك بعد تركه لفترة طويلة تجده أخذ زمن بطئ قبل أن يعود لسرعته وذلك لإعادة نظام التشغيل الملفات للذاكرة لبدء التعامل معه
طيب ما فائدة الكاش ميموري هنا ؟
حينما يكون هناك بيان سيتعامل معه المعالج بشكل اكبر بكثير مع عمليات الفلوتنج بوينت وغيرها ( تجد ذلك مثلا في محررات الفيديو وقت تحرير ملف أو في ضغط ملف او فك ضغطه إلخ )
يتم نقل البيانات للذاكرة الموجودة داخل المعالج وهي الأسرع من الذاكرة الخارجية
ويتم التعامل معها بعد تقسيمها لعدة مراحل
كل مرحلة يتم نقل أهم ما فيها من بيانات للذاكرة الأقرب L1 ثم إعادة الناتج وهكذا
معلومة أخيرة
انت حينما تفتح حاسوبك يتم تحميل البايوس الموجود علي اللوحة الأم والذي بدوره ينظر في البارتيشن ال active علي الهاردديسك ليري هل هناك نظام تشغيل أم لا ثم يحمل منه الكيرنل الخاص بالنظام للذاكرة وهو وقت إقلاع الويندوز أو اللينوكس بعدها يفتح النظام ويكون داخل الذاكرة هذا الكيرنل
============================================
ثالثاً : أنظمة الداتا بيز DBMS
ما الذي تقوم به ؟
يتم تحميل ال DBMS المشغل للداتا بيز مع إقلاع النظام ليكون مع الكيرنل في الذاكرة
حينما تكتب أن تعليمة سكول للغة البرمجة والتي هي في حالتنا php والتي تعمل علي الأباتشي
هناك مكتبة لل php خاص بالتعامل مع الماي سكول
تقوم ال php بطرق باب DBMS للمايسكول وتقول له أنا جالب لك تعليمة سكول لتطبقها لي
يأخذ ال DBMS التعليمة ثم يقوم بترجمتها interpreter يفهم منها أن المطلوب هو بيانات من الجدول كذا وكذا
يجهز المطلوب علي الهارديسك ثم يقوم بإرسال لنتائج للذاكرة ويخزنها في أي عدد من ال addresses داخل الذاكرة ثم يخزن في address منفصلة البيانات التالي
- تعليمة السكول التي تم تنفيذها
- أول مخزن للنتائج في الذاكرة
- أخر مخزن للنتائج في الذاكرة
مع معلومات أخري حول النتائج
ثم يعود لل php ويخبط عليها ويخبرها أنه نفذ المطلوب ويعطيها رقم فما هو هذا الرقم ؟
هو رقم الaddress المخزن فيه كل هذه البيانات :nice:
الأن تنتظر منك ال php أية عمليات تريدها
فلو قلت لها أريد عدد الأسطر ستذهب للذاكرة وتعدهم لك
ولو طلب الحيز الذي شغلته من الذاكرة ستذهب وتفعل
ولو طلبت جلب النتائج عبر لووب بأي من تلك الدوال الخاصة بذلك fetch تبدأ في عمل fetch للبيانات واحدة بواحدة
لو عملت free result يتم تفريغ كل محتوي هذه التعليمة من الداتا بيز
رابعاً : تطبيق عملي
لدينا جدول في قواعد البيانات أسمه options به 500 سطر من الخيارات الخاصة ببرمجيتنا
نفذنا التعليمة التالية
كود PHP:
$result = mysql_query("SELECT * FROM `options`");
ماذا سيحدث ؟
سترسل التعليمة لنظام قواعد البيانات ويفهم منها أنه مطلوب كل حقول الجدول options فيتم نقلها بالكامل للذاكرة ثم في عنوان في الذاكرة تخزن بيانات التعليمة وأول عنوان للبيانات وأخر عنوان
هذا العنوان الموجود في الذاكرة والحامل لمعلومات الكويري ونتائجها هو ما يعود ويخزن في المتغير $result
ينتهي التنفيذ ويصبح لدينا في ها المتغير مكان البيانات في الذاكرة وأنتهي إتصالنا تماماً بالهارد ديسك
الأن نقوم بعمل التالي
كود PHP:
while($myrow = mysql_fetch_array($result))
{
$new_array = $myrow;
}
ماذا سيحدث ؟
أنا أعطيت لل mysql_fetch_array وهو أمر fetch أي جلب من الذاكرة
أعطيتها رقم هو عنوان في الذاكرة يحوي بيانات تعليمة سكول أو بالأصح حقول وطلبت منها جلبها من الذاكرة علي هيئة مصفوفة مع تفريغها واحدة بواحدة
يبدأ التنفيذ من الذاكرة وتجلب العناوين واحدة بواحدة وكلما يتم جلب عنوان يتم وضع العنوان القادم في العنوان الأول اللي فيه البيانات الكلية فيصبح مخزن هناك أنه العنوان اللي عليه الدور
طيب ماذا حدث حينما حملت النتائج في مصفوفة ؟
قمت أن الأن بإعادت تخزين البيانات مرة أخري في الذاكرة ولكن هذه المرة تكون مخزنة بالإسم $new_array
الأن لو قمت بعمل
كود PHP:
mysql_freeresult($result);
يتم تفريغ الذاكرة من نتائج التعليمة
ولكن يكون لدينا في مكان أخر وعبر ال php متغير بالإسم $new_array هو عبارة عن مصفوفة ومحتواه هو ما كنا نريده
مثال أخر
طيب لو لدينا جدولين
الأول
users
والثاني
usergroup
نفذنا تلك التعليمة
كود PHP:
$result = mysql_query("
SELECT
user.*, usergroup.*
FROM `user` AS user
LEFT JOIN `usergroup` AS usergroup
ON ( user.`groupid` = usergroup.`groupid` )
WHERE user.`userid` = 1");
يتم علي الهاردديسك عمل جدول إفتراضي
يتم تحميل بيانات العضو رقم 1 من جدول user
ثم يتم ربط بيانات مجموعة الأعضاء رقم X بها فيتكون لدينا حقل جديد فيه بيانات العضو ومجموعته
يتم نقل هذا الحقل فقط للذاكرة بنفس الطريقة السابقة
ويتكرر كل ما تم في الطريقة السابقة
سؤال : ماذا لو أمتلأت الذاكرة ؟
الجواب : يبدأ نقل البيانات للذاكرة الإحتياطية وهنا يمتلاً لديك ال swap وتجد موقعك شديد البطئ بسبب أن الهارد ديسك أبطأ بكثير من الذاكرة وهنا تنصحك الداتا سنتر بإضافة ذاكرة إضافية للسيرفر
طيب ما هي فكرة الكاش في البرمجة ؟
وكيف تحسن مستوي برمجيتك لتصبح أسرع وأقل إستهلاك لموارد السيرفر ؟
هذا في درسنا القادم بإذن الله مع أحدث طرق التعامل مع الكاش