السلاام عليكم، هذا نقاش .. فارجوا من الاخ 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 سنوات