الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

بطئ في عملية الاتصال بقاعدة بيانات كبيره

بدأه Mohamed Ayoub في 29 ديسمبر 2012 · 5 رد · 1,149 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم اخواني الكرام

لدي استفسار بسيط

وهو انني لدي قاعدة بيانات بها أكثر من 150 الف عضو

والان اعمل واجهة بلغة الـ php وقمت بعمل استعلام من قاعدة البيانات لمعرفة عدد البيانات الموجوده في القاعده وعرضها في الواجهه بطريقه رائعه

واردت ان تظهر كالتاالي مثلاً

عدد الاعضاء المسجلين حتى الان 170,512 عضو

وكل عضو يسجل جديد يتم عمل تحديث للأستعلام كل ثانيه

ولكنني لاحظت ان الجهاز يصير بطيئ شويه فقلت اجعل التحديث كل 5 ثواني فوجدته بطيئ ايضاً

هذا هو ملف الـ php

$server    = 'localhost';
$user_DB   = 'root';
$pass_DB   = 102030;
$db_name   = 'pro';
mysql_connect($server,$user_DB,$pass_DB);
mysql_select_db($db_name);
$mysql   = mysql_query("SELECT * from `users`") or die (mysql_error());

echo mysql_num_rows($mysql);
     mysql_free_result($mysql);

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

  setInterval(function() {
              //  loadTab();
      $.ajax
      ({
        url: 'count_results.php',
        beforeSend: function ()
        {

        },
        success: function (data)
        {
            $("#ajaxCout").html(data);
        }

      }) 
	        }, 5000);

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

عشان عدد الاعضاء

بس لو فيه طريقه اعرف سبب البطئ ايه او مثلاً طريقه تخليني اضغط القاعده عشان متسببش اي مشاكل

#2

اخي ﻻ ترهق الحاسوب وكن رفيقا عليه .....

لما ﻻ تستخدم بنية :

SELECT COUNT(*) FROM....

عوضا عن:

"SELECT * from `users`"

انا لست خبيرا، ولكن ﻻحظت انك ترهق محرك قاعدة البيانات بحجز استعلام ثم استخدام دالة أخري ﻻيجاد عدد الصفوف.

تقبل مروري .. والله ولي التوفيق

3

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#3
محمد عودة كتب:

اخي ﻻ ترهق الحاسوب وكن رفيقا عليه .....

لما ﻻ تستخدم بنية :

SELECT COUNT(*) FROM....

عوضا عن:

"SELECT * from `users`"

انا لست خبيرا، ولكن ﻻحظت انك ترهق محرك قاعدة البيانات بحجز استعلام ثم استخدام دالة أخري ﻻيجاد عدد الصفوف.

تقبل مروري .. والله ولي التوفيق

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

نعم اخي كانت المشكله في الاستعلام والحين استخدمت الـ count وبالفعل الواجهه صارت سريعه جداً وايضاً مشغل قرأن في الخلفيه اصبح لا يقطع مثل الاول

وانا فضلت اسخدم الاجاكس من عشان السرعه في التعامل اكثر

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

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

جزاك الله خيراً اخي الحبيب والله يعطيك العافيه ويوفقك ياارب

#4

يمكنك تحسين الأداء أكثر بكثير عن طريق إنشاء جدول لمعلومات الموقع، وضع به قيمة رقمية لعدد الأعضاء مرة واحدة عند الإنشاء، بعد كل إضافة عضو جديد، إقرأ قيمة هذا الرقم وزده بواحد، ستتعامل مع سجل واحد بدل آلاف السجلات.

sqlite> CREATE TABLE users(                             	-- جدول الأعضاء
   ...>     	id INTEGER PRIMARY KEY AUTOINCREMENT,
   ...>     	name TEXT); 
sqlite>
sqlite> INSERT INTO users VALUES(NULL, "Mohamed Ayoub");	-- أعضاء
sqlite> INSERT INTO users VALUES(NULL, "Mohammad Aoudah");  -- 
sqlite> INSERT INTO users VALUES(NULL, "Mr.B");         	-- 
sqlite>
sqlite> CREATE TABLE site_info(number_of_users INTEGER);	-- جدول لمعلومات الموقع
sqlite> SELECT COUNT(*) FROM users;                     	-- نحسب عدد الأعضاء ، هذه العملية المتعبة سنعملها مرة
3
sqlite> INSERT INTO site_info VALUES(3);                	-- نضيف عدد الأعضاء للجدول
sqlite> 
sqlite> INSERT INTO users VALUES(NULL, "Spam");         	-- عضو جديد
sqlite> SELECT number_of_users FROM site_info;          	-- نستعلم عن عدد الأعضاء
3
sqlite> UPDATE site_info SET number_of_users = 4;       	-- نزيد هذا العدد بواحد
sqlite> SELECT number_of_users FROM site_info;
4
sqlite>
2
#5
Mohamed Ayoub كتب:

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

نعم اخي كانت المشكله في الاستعلام والحين استخدمت الـ count وبالفعل الواجهه صارت سريعه جداً وايضاً مشغل قرأن في الخلفيه اصبح لا يقطع مثل الاول وانا فضلت اسخدم الاجاكس من عشان السرعه في التعامل اكثر

جزاك الله خيراً اخي الحبيب والله يعطيك العافيه ويوفقك ياارب

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

Mr.B كتب:

يمكنك تحسين الأداء أكثر بكثير عن طريق إنشاء جدول لمعلومات الموقع، وضع به قيمة رقمية لعدد الأعضاء مرة واحدة عند الإنشاء، بعد كل إضافة عضو جديد، إقرأ قيمة هذا الرقم وزده بواحد، ستتعامل مع سجل واحد بدل آلاف السجلات.

فكرة رائعة، لكن:

  • MySQL فى MyISAM فعليا تقوم بتخزين عدد الصفوف وهي ﻻ تقوم بعد الصفوف فى كل مرة تطلب منها ذلك
  • MySQL فى المحركات اﻻخري مثل InnoDB ﻻ تقوم بتخزين عدد الصفوف، وتقوم فى كل مرة تطلب منها عدد الصفوف بأجراء عملية العدد على كل الصفوف فى الجدول.

تقبل مروري والله ولي التوفيق

1

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#6
Mr.B كتب:

يمكنك تحسين الأداء أكثر بكثير عن طريق إنشاء جدول لمعلومات الموقع، وضع به قيمة رقمية لعدد الأعضاء مرة واحدة عند الإنشاء، بعد كل إضافة عضو جديد، إقرأ قيمة هذا الرقم وزده بواحد، ستتعامل مع سجل واحد بدل آلاف السجلات.

sqlite> CREATE TABLE users(                             	-- جدول الأعضاء
   ...>     	id INTEGER PRIMARY KEY AUTOINCREMENT,
   ...>     	name TEXT); 
sqlite>
sqlite> INSERT INTO users VALUES(NULL, "Mohamed Ayoub");	-- أعضاء
sqlite> INSERT INTO users VALUES(NULL, "Mohammad Aoudah");  -- 
sqlite> INSERT INTO users VALUES(NULL, "Mr.B");         	-- 
sqlite>
sqlite> CREATE TABLE site_info(number_of_users INTEGER);	-- جدول لمعلومات الموقع
sqlite> SELECT COUNT(*) FROM users;                     	-- نحسب عدد الأعضاء ، هذه العملية المتعبة سنعملها مرة
3
sqlite> INSERT INTO site_info VALUES(3);                	-- نضيف عدد الأعضاء للجدول
sqlite> 
sqlite> INSERT INTO users VALUES(NULL, "Spam");         	-- عضو جديد
sqlite> SELECT number_of_users FROM site_info;          	-- نستعلم عن عدد الأعضاء
3
sqlite> UPDATE site_info SET number_of_users = 4;       	-- نزيد هذا العدد بواحد
sqlite> SELECT number_of_users FROM site_info;
4
sqlite>

ماشاء الله تبارك الله

فكره ممتازه وشرح رائع ما يحتاج شيئ جزاك الله خيراً وياارب يكون في ميزان حسناتك

والفكره بتعتك فتحتلي الباب اني أقدر اعمل جدول خاص باحصائية الموقع وأضع فيه عدد الاعضاء عدد المواضيع عدد الردود وعدد الملفات وهكذا

بمنتهى السهوله وبدون الرجوع الي الجداول التي تحتوي على عشرات الالف من البيانات

فالان سأقوم بأقتباس كلامك وسأضعه في مفكره وسأبدأ في التنفيذ اليوم بأذن الله :)

فأنت تعلم أخي الحبيب بأن ما يميز الموقع في المقام الاول هو سرعته واستجابته في تنفيذ الاوامر ثم المحتوى الجيد في المرتبه الثانيه .

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

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…