عرض مشاركة واحدة
Moderator
تاريخ التسجيل: Aug 2004-
#2 (permalink)  

السلاام عليكم، هذا نقاش .. فارجوا من الاخ azizsoft ان لا يزعل مني
انا بصراحه ضد الخطوه
كود PHP:
mysql_query("INSERT INTO antiload(type,awner,time)VALUES('search','$user','$time')"); 
لانك الان تضع معلومه زائده في قاعده البيانات. وكما تعرف الكتابه في قاعده البيانات يأخذ وقت اكبر من القرائه، وايضا عندما يكون العضو منتسب لمده 4 او 5 سنوات وبحث اكثر من 1000 مره، فستفعل ضغط لقاعده البيانات في حين البحث عن المعلومه التي تريدها.

طبعا لن اقول رأيي بدون اي اقتراحات! .. وهذه هي اقتراحاتي..
1- اذا اردت الاصرار على استخدام طريقتك .. ففعل التالي .. قم بوضع الاندكس المناسب .. وضعه بالذات على الtime .. هذا سيجعل البحث اسرع بمالا يقل عن 700%.. ايضا لا تنسى ان تضع cronjob لكي يمسح الجدول من محتواها في كل يوم .. هذا سيوفر لك مساحه و قوه معالجه

فغير تركيب الجدول من
كود:
CREATE TABLE `antiload` (
`id` INT( 100 ) NOT NULL AUTO_INCREMENT ,
`type` VARCHAR( 100 ) NOT NULL ,
`awner` VARCHAR( 100 ) NOT NULL ,
`time` VARCHAR( 100 ) NOT NULL ,
UNIQUE (
`id` 
)
) ENGINE = MYISAM ;
كود:
CREATE TABLE IF NOT EXISTS `antiload` (
  `id` int(100) NOT NULL auto_increment,
  `type` varchar(100) NOT NULL,
  `awner` varchar(100) NOT NULL,
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`),
  KEY `time` (`time`)
) ENGINE=MyISAM;
وبدون استخدام الامر
كود PHP:
mysql_query("INSERT INTO antiload(type,awner,time)VALUES('search','$user','$time')"); 
استخدم

كود PHP:
mysql_query('SET @a = (SELECT id FROM `antiload` as `temp` WHERE `awner` = "'$user'" LIMIT 1);
UPDATE `antiload` SET `time` = NOW() where id = @a;
'

والباقي .. اتبع نفس خطوات الاخ azizsoft

2- اما الحل المجنون .. اللذي لن يقتل السرفر حتى وان كان هناك هجوم على قاعده البيانات .. هو باستخدام خواص الfull-text search الموجوده في MySQL4 والاصدارت التي بعدها . مع العلم ان الMySQL4 صدر قبل قرابه ال4 سنوات






__________________
هلابي افضل المواقع العربية تصميماً
انصح باستخدام ابونتو
hilaby غير متواجد حالياً   قديم 24-04-2008, 08:48 AM
رد مع اقتباس