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

الموضوع: ايهما افضل: مئات الجداول او عشرات الالاف من الصفوف فى جدول واحد

  1. #1
    عضو سوبر نشيط
    تاريخ التسجيل
    Jun 2007
    المشاركات
    622

    ايهما افضل: مئات الجداول او عشرات الالاف من الصفوف فى جدول واحد



    اهلا شباب ،

    لدى استفسار بسيط و سأشرح بايجاز الفكرة ..
    لدى جدول كبير به 20 الف معلومة، المعلومات مقسمة A و B و C .. الخ
    يعنى مقسمة معلومات ثقافية، رياضية، تاريخية .. الخ

    فى كل مرة يزور فيها الزائر صفحة للمعلومات الرياضية مثلا، اقوم باختيار معلومة عشوائية من الـ 20 الف معلومة بحيث يكون التصنيف رياضى ..

    كود PHP:
    $info mysql_query("SELECT * FROM `info` WHERE `category` = 'sport' ORDER BY RAND() LIMIT 1"); 
    هذا الامر مرهق جدا لقاعدة البيانات بطريقة كبيرة جدا، و لا اعرف ما هو الحل الأمثل لانى لست مبرمج محترف و لكن مجرد هاوى ..
    فكرت فى عمل جدول لكل تصنيف و انا لدى حوالى 200 تصنيف فى كل تصنيف 100 معلومة .. فهل البحث عن معلومة عشوائية فى قاعدة بيانات من 200 جدول (و الجدول فيه 100 معلومة) افضل من البحث عن معلومة عشوائة فى قاعدة بيانات من جدول واحد (والجدول فيه 20000 معلومة) ؟

    ام ان هناك حلول احترافية لمثل هذه الحالة افضل من تلك الطريقتين!؟
    يعنى ربما يكون حفظ المعلومات فى ملف txt و يتم اختيار معلومة عشوائية منه افضل اساسا من اللجوء لقواعد البيانات << مجرد مثال لا اعرف اذا كان صحيحا ام لا



    تحياتى





    التعديل الأخير تم بواسطة FadyCoder ; 05-02-2011 الساعة 09:12 AM
    __________________
    .
    نافذة الاستضافة
    .


  2. #2


    يالغالي التعليمة :

    ORDER BY RAND()

    هي اللي تهلك الموقع وتضغط عليه !

    لذلك اجلب مثلا 5 بدون ترتيب

    وقم بعمل لها rand من خلال php

    اما انك تقسمهم لـ 200 تقسيم هذا خطأ فما صارت برمجية ديناميكية ! ، اذا كل ما بدك تسوي تصنيف تضيف جدول كامل !

    تحياتي لك





    __________________
    زورونا في موقع الحياة للنقاشات والأسئلة والأجوبة :
    - php >> وهو لحل مشاكل php وما حولها
    - Ideas >> وهو لعرض الأفكار وتقييمها وايضا لمناقشة الأفكار

  3. #3
    عضو نشيط
    تاريخ التسجيل
    Nov 2003
    المشاركات
    175


    بطريقة بسيطة قم بالتالي:

    1- قم بإخراج الmax للid.
    2- قم بعمل راند لرقم بين 0 و max
    3- قم بعمل select باستخدام الرقم العشوائي الذي ظهر كID.

    بهذه الطريقة تقلل الضغط على قواعد البيانات و تقوم بعمل العملية الصعبة في PHP





    __________________
    إن كان الكلام من فضة ، فالسكوت من ذهب

  4. #4


    بطريقة بسيطة قم بالتالي:

    1- قم بإخراج الmax للid.
    2- قم بعمل راند لرقم بين 0 و max
    3- قم بعمل select باستخدام الرقم العشوائي الذي ظهر كID.

    بهذه الطريقة تقلل الضغط على قواعد البيانات و تقوم بعمل العملية الصعبة في PHP
    جزاك الله خير
    عجبتنى جدا هذه الطريقة :nice:





    __________________
    - حسابى على فيسبوك --> هنا
    - لطلبات تعريب السكربتات والقوالب & التعديلات البرمجية ---> MtRp@live.com

  5. #5


    بطريقة بسيطة قم بالتالي:

    1- قم بإخراج الmax للid.
    2- قم بعمل راند لرقم بين 0 و max
    3- قم بعمل select باستخدام الرقم العشوائي الذي ظهر كID.

    بهذه الطريقة تقلل الضغط على قواعد البيانات و تقوم بعمل العملية الصعبة في PHP
    طريقة جميلة ، و أضيف عليها أن تجعل الارقام على شكل مصفوفة ثم تستخدم التعليمة
    WHERE IN

    فقط للتسهيل

    طبعا من خلال سؤال صاحب فيمكن إستخدام الكاش في حال رغب بتقليل الضغط على قواعد البيانات ، و توجد طرق كثيرة تؤدي إلى نفس الغرض .






  6. #6
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    طريقة أبي كامل جيدة لكنها قابلة للخطأ،

    لتفادي الخطأ يمكنك الحصول على رقم عشوائي بين الصفر والـ Max - 1 ، وفي الاستعلام قم بجلب النتائج ذات الـ ID الأكبر من الرقم العشوائي الناتج، واحصل على نتيجة واحدة باستخدام limit 1 ..

    لم أختبر ذلك من ناحية الأداء، لكن هذا يبدو أكثر منطقاً مما ذكر في الأعلى ..

    تحياتي،





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  7. #7
    عضو نشيط
    تاريخ التسجيل
    Nov 2003
    المشاركات
    175


    أستاذي العزيز ما الخطأ الذي ممكن حصوله ؟

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





    __________________
    إن كان الكلام من فضة ، فالسكوت من ذهب

  8. #8
    عضو سوبر نشيط
    تاريخ التسجيل
    Jun 2007
    المشاركات
    622


    شاكر لكم مساعدتكم ..

    2- قم بعمل راند لرقم بين 0 و max
    بالنسبة لطريقتك اخى ابو كامل، لا استطيع تنفيذها لان المعلومات ليست مرتبة ..
    فقد تجد معلومة ثقافية ثم رياضة تم ثقافية مرة أخرى !
    و بالتالى الرقم العشوائى لن يعبر عن تصنيف محدد

    كذلك لاحظ انه ربما تكون هناك معلومة محذوفة .. فمثلا قد يكون الـ ID 10 غير موجود بسبب حذف المعلومة.





    __________________
    .
    نافذة الاستضافة
    .

  9. #9
    عضو نشيط
    تاريخ التسجيل
    Aug 2007
    المشاركات
    44


    السلام عليكم ..

    كنت متوقع ردك ، وهو أن الطريقة السابقة ستواجه مشكلة في حالة حذف البيانات وقد لا يتم إيجاد السجل برقم الـ ID ( طبعا الأخ أشرف السمهوري قدم حل لهذه المشكلة ).

    لكن المشكلة الثانية هو أنك تريد جلب سجل واحد لتصنيف معين وهنا يعني أن أرقام التسلسل ستكون مبعثرة بين التصانيف.

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

    قد تحتاج لإضافة فهرسة لأحد حقول الجدول.

    أتمنى لك التوفيق






  10. #10
    عضو سوبر نشيط
    تاريخ التسجيل
    Jun 2007
    المشاركات
    622


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





    __________________
    .
    نافذة الاستضافة
    .

  11. #11
    عضو سوبر نشيط
    تاريخ التسجيل
    Jun 2007
    المشاركات
    622


    الفكرة النهائية اللى وصلت لها الآن ..

    اقوم بجمع الـ IDs لكل تصنيف فى مصفوفة رقمية عادية، و عند البحث عن معلومة فى تصنيف معين اقوم بالبحث عن ID عشوائى من هذه المصفوفة و منه احصل على المعلومة ..

    اعتقد الحصول على رقم عشوائى من مصفوفة لا يسبب ضغط على السيرفر ؟

    كود PHP:
    $rand_keys array_rand($myarray2);
    echo $[
    $rand_keys[0]] ; 






    التعديل الأخير تم بواسطة FadyCoder ; 06-02-2011 الساعة 12:59 PM
    __________________
    .
    نافذة الاستضافة
    .

  12. #12
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    أبو كامل، كما وضّح الإخوة في الأعلى، المشكلة هي أنك قد تكون قد حذفت سجلاً أو أكثر، ليست جميع احتمالات الأرقام صالحة

    FadyCoder ، الطريقة بعد تعديلي ستعمل معك لكن اجعل الـ Max هو أكبر رقم يخص نفس القسم، ستعمل لكن ربما بنسبة تكرار أكبر، لكنها ستعمل حتماً ..

    تحياتي،





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  13. #13
    عضو نشيط
    تاريخ التسجيل
    Nov 2003
    المشاركات
    175


    فعلاً مسألة الحذف هي مشكلة في حالة استخدام الكود كما هو. طبعاً في برامجي لدي طريقة أخرى للتعامل مع الحذف.

    لكن هنالك طريقة أخرى تستدعي الحصول على عدد الصفوف الموجودة للقسم الذي تريده.
    SELECT COUNT(*) `info` WHERE `category` = 'sport'

    بعد ذلك تقوم بعمل رقم عشوائي بين 0 و count-1

    من ثم ببساطة استخدم هذا الرقم، و ليكن المتغير $random_number

    SELECT * FROM `info` WHERE `category` = 'sport'
    limit $random_number,1





    __________________
    إن كان الكلام من فضة ، فالسكوت من ذهب

  14. #14
    عضو سوبر نشيط
    تاريخ التسجيل
    Jun 2007
    المشاركات
    622


    وصلتنى فكرتكما استاذ اشرف، استاذ ابو كامل و كذلك الفكرة التى طرحها استاذ عبدالله فى البداية ..
    لكن السؤال الآن ايهما افضل و اسرع اداءا؟ ارى ان فكرة عمل مصفوفة بالـ IDs لتصنيف معين و اختيار ID عشوائى اسرع لانها كلها تتم بعيدا عن قاعدة البيانات و من ثم استخدم الـ ID فى الحصول على المعلومة مباشرة دون تنفيذ اى استعلامات آخرى ؟ << هذه وجهة نظرى إلا اذا كان الامر array_rand($myarray, 2) اصلا يسبب ضغط على السيرفر.

    و لشرح الفكرة اكثر .. لكل تصنيف سيكون هناك مصفوفة تحتوى على الـ IDs للمعلومات، و عند اضافة معلومة او حذف معلومة يتم اضافة او حذف الـ id الجديد من المصفوفة
    اول ما الزائر يدخل على التصنيف الرياضى اقوم بجلب بعض المعلومات عن التصنيف مثل الاسم و بعض المعلومات الآخرى و منها حقل يحتوى على المصفوفة التى انشأتها و احصل منها على قيمة عشوائية يكون هو الـ id
    و اجلب المعلومة مباشرة بالـ id





    التعديل الأخير تم بواسطة FadyCoder ; 07-02-2011 الساعة 05:27 AM
    __________________
    .
    نافذة الاستضافة
    .

  15. #15
    عضو نشيط
    تاريخ التسجيل
    Nov 2003
    المشاركات
    175


    إذا كانت لديك الID الخاصة بالمعلومة لكل قسم في مصفوفة فيمكنك عمل الطريقة التي ذكرتها.

    في النهاية الضغط لن يكون على قواعد البيانات، و في الغالب لن يكون هنالك ضغط كبير إلا إذا كان حجم مصفوفة الID كبيرة بحيث لا تتسع في الميموري.





    __________________
    إن كان الكلام من فضة ، فالسكوت من ذهب





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

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

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