صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 17

الموضوع: الكاش مع قواعد البيانات

  1. #1

    الكاش مع قواعد البيانات



    بسم الله الرحمن الرحيم

    فكرة درسنا اليوم هي عندما تحتاج الى استعلامات كثيرة خصوصا في الصفحة الرئيسة من برنامجك فلا مجال من عدم استخدام الكاش
    وهذا ينقسم الى قسمين

    كاش الملفات

    كاش قواعد البيانات

    وكاش قواعد البيانات ينقسم الى قسمين


    كاش في اوامر الاستعلام
    كاش بيانات يتم تخزينها في جدول خاص لهذا الأمر


    والمقال سيتكلم عن القسم الأخير وهو تخزين معلومات في جدول الكاش

    سأبدأ بوضع تصور عام لبرنامج يتم تطبيق عليه نظام كاش قواعد البيانات

    البرنامج او السكريبت او تطبيق ويب سميه كيفما تشاء , سيتكون من اخبار و دليل مواقع و اي شيئ اخر المهم انك تحتاج لعرض اخر ما تم اضافته في الجداول الموجودة عندك

    وانا سأركز على اخر ما تم اضافته في الأخبار ودليل المواقع

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

    وبهذا اتت فكرة الكاش للتقليل من عدد الاستعلامات وأنا سأوضح فكرة بسيطة ولكنها مفيدة جدا

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

    اذا جدول site سيحتوي على الحقول التالية

    name اسم الموقع
    email بريد الموقع
    news اخر خمسة اخبار
    links اخر خمسة مواقع

    ويكون الجدول كالتالي
    كود PHP:
    CREATE TABLE `site` (
    `
    nameVARCHAR255 NOT NULL ,
    `
    emailVARCHAR255 NOT NULL ,
    `
    newsTEXT NOT NULL ,
    `
    linksTEXT NOT NULL
    ENGINE MYISAM 
    في صفحة اضافة او تعديل او حذف الأخبار سيتم جلب اخر خمسة اخبار من جدول الأخبار وحفظ النتيجة في مصفوفة وادخالها الى جدول site في حقل news

    سأشرح بالتفصيل هذا الأمر

    لنفرض اننا في صفحة اضافة الخبر وانا لن اشرح كيفية اضافة بيانات الى القاعدة لانك اذا وصلت الى مرحلة الكاش فاعتقد انك تعرف هذا

    عندما يتحقق شرط الاضافة اي ان البيانات حفظت بنجاح في القاعدة فانك تقوم بجلب اخر الأخبار ووضعها في مصفوفة
    كود PHP:
    $sql=mysql_query("select * from news order by id DESC limit 5");
    $data=array();// انشاء متغير سيخزن البيانات في مصفوفة
    // يتم استخدام حلقة التكرار لتخزين البيانات
    while($data[]=mysql_fetch_array($sql)); 
    وبعد التخزين في المصفوفة الأن ستم تخزين المصفوفة في دالة serialize()
    كود PHP:

    $data
    =serialize($data); 
    والأن سيتم تحديث جدول site خصوصا حقل news لحفظ مصفوفة البيانات
    كود PHP:
     
    mysql_update
    (" update site set news='$data'"); 
    وهذا هوا الكود بالكامل
    كود PHP:
    // فرضا ان هناك جدول اخبار بهذا الاسم 
    //add_news.php 
    $sql=mysql_query("select * from news order by id DESC limit 5");
    $data=array();// انشاء متغير سيخزن البيانات في مصفوفة
    // يتم استخدام حلقة التكرار لتخزين البيانات
    while($data[]=mysql_fetch_array($sql));
     

    $data=serialize($data);
     
    mysql_update(" update site set news='$data'"); 
    لو تلاحظون انني لم استخدم الشروط للتأكد من البانات والتأكد من تعديل جدول site
    تركت هذا لكم وانا ركزت فقط على شرح طريقة الكاش
    ايضا كلمة كاش هي انجليزية ونحن نفهم منها انها للملفات او البيانات المؤقتة

    والأن لنرجع الى صفحة برنامجنا الرئيسية ونقوم باستخراج البيانات المؤقتة من جدول site

    كود PHP:
    // index.php
    $sql=mysql_query(" select * from site");

    $result=mysql_fetch_array($sql);

    $news=unserialize($result['news']);// نقوم بفك دالة serialize 
    حاليا البيانات موجودة في مصفوفة وطريقة استعراض المصفوفة معروفة للجميع
    كود PHP:
    // index.php
    $sql=mysql_query(" select news from site limit 1");

    $result=mysql_fetch_array($sql);

    $news=unserialize($result['news']);// نقوم بفك دالة serialize

    foreach( $news as $d ){
        print 
    $d['title'];
        print 
    $d['text'];

    title و text هما حقول في جدول news وهذا فقط مثال للتوضيح

    ويتم تطبيق نفس الطريقة على جميع الجداول الأخرى

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

    بعد تطبيق هذا الدرس ستلاحظون خفة التطبيق الذي تعملون عليه

    هذا فان اخطأت فمن نفسي والشيطان وان اصبت فمن الله عز وجل
    واستغفر الله العظيم





    __________________
    عدت
    اقتراحاتكم -> www.elbachiri.com


  2. #2


    جميل جدا أخي عبد الواحد ، و الأجمل عودتك لكتابة الدروس !!

    من جهتي فأنا أفضل كاش الملفات ، حيث العملية لا تختلف عما قمت به ، لكن بالمقابل يتم حفظ المخرجات في ملفات بعد تمريرها على دالة serialize

    الفكرة هي :

    1 - إستخراج البيانات و وضعها في ملف بإسم معين مثل abcd.pfx
    2 - عند عرض الصفحة يتم التحقق من الملف abcd.pfx ، إذا كان موجودا يتك عرض محتواه ، و إذا لم يكن موجودا يتم إستخراج البيانات من قاعدة البيانات ثم إنشاء الملف من جديد .
    3 - عند تحديث أو حذف البيانات يتم خذف الملف ، ليتم تجديده عند عرض البيانات في المرة المقبلة .

    أي سؤال بخصوص الفكرة أنا هنا ، طبعا بعد أخي عبد الواحد .

    @عبد الواحد ، كنت سأتصل بك صباحا -هاتفيا- لكني لم أرد إزعاجك

    بالتوفيق .






  3. #3
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    هل تقصد بالكاش في اوامر الاستعلام ما يسمى بال prepare
    لإني سمعت انها تقوم بحفظ الاستعلام بعد ان يتم فحصه وتحليله من قبل محرك قواعد البيانات

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

    http://www.mysqltutorial.org/mysql-views-tutorial.aspx

    من الافضل عمل خاصية الكاش بالكلاسات لأننا وقتها يمكننا تغيير طريقة عمل الكاش
    بسهولة عن طريق الوراثة.






  4. #4
    عضو جديد
    تاريخ التسجيل
    May 2008
    المشاركات
    10


    شكرا لك أخى عبد الواحد البشيرى
    الدرس جميل ومتميز






  5. #5


    1 - إستخراج البيانات و وضعها في ملف بإسم معين مثل abcd.pfx
    2 - عند عرض الصفحة يتم التحقق من الملف abcd.pfx ، إذا كان موجودا يتم عرض محتواه ، و إذا لم يكن موجودا يتم إستخراج البيانات من قاعدة البيانات ثم إنشاء الملف من جديد .
    3 - عند تحديث أو حذف البيانات يتم خذف الملف ، ليتم تجديده عند عرض البيانات في المرة المقبلة .
    طبعا هنا أقصد الكاش الجزئي للصفحات ، بمعنى حفظ المخرجات فقط في حال أردت حفظها ،
    بمعنى آخر أنه ليس حفظ كامل الصفحة في الكاش !!

    رأيت التفصيل لظني أني لم أوضح الفكرة في ردي السابق .

    بالتوفيق .






  6. #6


    جميل جدا أخي عبد الواحد ، و الأجمل عودتك لكتابة الدروس !!

    من جهتي فأنا أفضل كاش الملفات ، حيث العملية لا تختلف عما قمت به ، لكن بالمقابل يتم حفظ المخرجات في ملفات بعد تمريرها على دالة serialize

    الفكرة هي :

    1 - إستخراج البيانات و وضعها في ملف بإسم معين مثل abcd.pfx
    2 - عند عرض الصفحة يتم التحقق من الملف abcd.pfx ، إذا كان موجودا يتك عرض محتواه ، و إذا لم يكن موجودا يتم إستخراج البيانات من قاعدة البيانات ثم إنشاء الملف من جديد .
    3 - عند تحديث أو حذف البيانات يتم خذف الملف ، ليتم تجديده عند عرض البيانات في المرة المقبلة .

    أي سؤال بخصوص الفكرة أنا هنا ، طبعا بعد أخي عبد الواحد .

    @عبد الواحد ، كنت سأتصل بك صباحا -هاتفيا- لكني لم أرد إزعاجك

    بالتوفيق .
    نعم صحيح و كاش الملفات كنت قدت كتبت عنه من قبل ووضعته في هذا الدرس

    اعتقد انك لم تنتبه لهذا ؟





    __________________
    عدت
    اقتراحاتكم -> www.elbachiri.com

  7. #7


    هل تقصد بالكاش في اوامر الاستعلام ما يسمى بال prepare
    لإني سمعت انها تقوم بحفظ الاستعلام بعد ان يتم فحصه وتحليله من قبل محرك قواعد البيانات

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

    http://www.mysqltutorial.org/mysql-views-tutorial.aspx

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

    حاول تقرأ الدرس وستفهم مقصدي





    __________________
    عدت
    اقتراحاتكم -> www.elbachiri.com

  8. #8
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    انا استخدم كاش الاستعلامات لأنه سهل التنفيذ، ويمكن دمجه بسهولة في كلاس قواعد البيانات

    عند عمل امر
    insert
    delete
    update

    يتم مسح الكاش، لكن بالنسبة لدالة ال update تختلف قليلًا لأنها يمكن ان تستعمل
    لتحديث عدد الزيارات للمقال مثلا، وبالتالي نمسح الكاش عند كل زيارة وبالتالي يكون
    عبئ على السكربت بدل ان يكون فائدة.

    لذا ارسل مع دالة ال update متغير بولياني حسبه احدد اذا كنت اريد ان امسح الكاش ام لا
    هناك ايضًا متغير لعمر الكاش cache_lifetime


    كيف اخزّن الكاش؟

    اسم الملف هو الاستعلام بعد تمريره بدالة md5 او اي دالة تشفير
    والمحتوى هو معلومات الاستعلام (بعد وضعها في مصفوفة) بصيغة json

    عن طريق الدوال json_encode,json_decode
    والجميل في هذه الصيغة انها تحفظ تكويد النص فلا يظهر مشوش


    هناك ايضًا شيء هام يجب ان يعمله اي شخص حريص على سرعة برمجيته وهو تكييش الصور المصغرة ووضعها بأخف صيغة(وكذلك عدم كتابة ال url لها في ال src انما وضع العنوان في السيرفر).
    يعني
    كود PHP:
    <img src='images/1.png' /> 
    بدلا ً من
    كود PHP:
    <img ser='http://site.com/images/1.png'/> 
    لعمل المصغرات وتكييشها وعمل عمليات اخرى على الصور(فلاتر ، اطر ، watermark) استعمل سكربت phpThumb
    وهو الافضل بنظري في هذا المجال
    وهذا مثال عليه:
    http://phpthumb.sourceforge.net/demo/demo/phpThumb.demo.demo.php

    من الجدير بالذكر ان قدرات الكاش لا تظهر جيدًا في اللوكال هوست لأن الموقع على جهازك
    بل تظهر في المواقع على شبكة الانترنت لأن الموقع "بعيد" عنك
    وكذلك تظهر بصورة واضحة مع الاتصالات الضعيفة
    وتظهر ايضًا مع الباندويث واستغلال موارد الاستضافة

    على سبيل المثال لغرض التجربة قمت برفع سكربت البوم صور(بدقة عالية) على استضافة ولم اقم بعمل كاش للصور
    بل قمت بتصغيرها بواسطة width,height بال html

    النتيجة ان زمن احضار الصفحة كان 12 ثانية بدون كاش
    بينما مع كاش كان 5 ثوان فقط(قابلة للتنزيل مع كاش المتصفح)

    وهنا تجد الفرق





    التعديل الأخير تم بواسطة ahmad sadiq ; 05-12-2010 الساعة 05:35 AM

  9. #9
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    شيء اخر نسيت ان اذكره هو الطريقة لقياس وقت تحميل الصفحة
    ووقت ظهور كل عنصر فيها ، باستخدام متصفح الكروم(شكرًا للاخ ياسين فهو من دلني عليها)








    التعديل الأخير تم بواسطة ahmad sadiq ; 12-05-2011 الساعة 02:17 AM

  10. #10
    عضو نشيط
    تاريخ التسجيل
    Apr 2010
    المشاركات
    119


    موضوع مهم لكل مبرمج
    باركك الله فيك






  11. #11
    عضو نشيط
    تاريخ التسجيل
    Apr 2010
    المشاركات
    119


    عذرا لتكرار المشاركة





    التعديل الأخير تم بواسطة هاوي برمجة ; 05-12-2010 الساعة 02:36 AM

  12. #12
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    232


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





    التعديل الأخير تم بواسطة milan07 ; 05-12-2010 الساعة 06:21 AM
    __________________
    www.morobile.com

  13. #13
    عضو جديد
    تاريخ التسجيل
    May 2010
    المشاركات
    28


    السلام عليكم اخوانى والله انا بتعلم منكم الكثير والكثير لانى مازلت مبتدئ فى هذا المجال ولكن معكم بإذن الله سنكون الافضل






  14. #14


    استخدمت الدالتين
    serialize للادخال
    و unserialize للاستخرج
    وذلك فى عملية post لحقول كثيرة ولك اذا احتوى احد الحقول على ", ', :, or ;
    سيحدث خطأ لذلك فى الادخال استخدم
    $data = base64_encode(serialize($_POST));
    وفى الاستخراج
    $_POST = unserialize(base64_decode($result[data]));
    تحياتى لكم جميعاً أرجو أن يكون تعليقى واضح






  15. #15
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    213


    ما شاء الله درس مفيد جدا

    لكن هناك استفسار

    فلنفرض انا لدي موقع شبيه بمنتدى

    يحتوي الموقع على عدة اقسام واريد ان اظهر في الصفحه الرئيسية كل قسم واول موضوع من القسم

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

    اي اني ساقوم بعمل اكثر من ثلاثة استعلامات لكل قسم من اقسام الموقع

    فلو لدي مثلا 20 قسم × 3 استعلامات سينتج لدي 60 استعلام لكل زائر

    فهل من طريقة عمل الكاش لهذه المواقع

    شكرا










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض