我正在PHP的社交網絡類型網站工作,我做過這一次,並且網站超過了我的編碼能力以跟上,這是幾年前現在我想再次解決這個項目。用戶操作喜歡社交網絡Facebook,myspace,所有大的
Basicly我的網絡上有一個friend_friend MySQL表持續跟蹤誰是誰的朋友,對於每位確認的朋友,有2項進入DB 這裏是表:
CREATE TABLE IF NOT EXISTS `friend_friend` (
`autoid` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(10) DEFAULT NULL,
`friendid` int(10) DEFAULT NULL,
`status` enum('1','0','3') NOT NULL DEFAULT '0',
`submit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`alert_message` enum('yes','no') NOT NULL DEFAULT 'yes',
PRIMARY KEY (`autoid`),
KEY `userid` (`userid`),
KEY `friendid` (`friendid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1657259 ;
然後我有一個包含所有用戶信息的用戶表稱爲friend_reg_user
然後,用戶發佈公告的表格,該對象僅顯示來自您與之成爲朋友的用戶的公告。 以下是公告表
CREATE TABLE IF NOT EXISTS `friend_bulletin` (
`auto_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(10) NOT NULL DEFAULT '0',
`bulletin` text NOT NULL,
`subject` varchar(255) NOT NULL DEFAULT '',
`color` varchar(6) NOT NULL DEFAULT '000000',
`submit_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`status` enum('Active','In Active') NOT NULL DEFAULT 'Active',
`spam` enum('0','1') NOT NULL DEFAULT '1',
PRIMARY KEY (`auto_id`),
KEY `user_id` (`user_id`),
KEY `submit_date` (`submit_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=455144 ;
好了,所以要做到這一點我要麼運行在friend_friend表查詢來獲取用戶的所有朋友,並把它們添加到字符串這樣1,2,3,4, 5,6這些將是朋友ID號,然後從公告表中選擇公告作者ID在我的朋友ID列表中
第二種方法是使用JOINS一次獲取所有這些數據。
我現在終於找到了,一旦網站變得非常龐大,當數據庫中有數百萬的朋友記錄和公告時,這一切都會變慢,我有什麼選擇來加快速度?有一個更好的方法嗎?此外,我正在計劃更改公告,以包括更多僅僅是公告,但要做更多的用戶操作,如現在的大網站,以便顯示狀態更新,博客和公告以及所有
聲音說起來容易,做:-)我 – 2009-07-22 18:15:22