小弟我們討論一下 每個QQ有很多不同好友,資料庫怎麼設計會更方便
來源:互聯網
上載者:User
我們討論一下 每個QQ有很多不同好友,資料庫如何設計會更方便?
我們討論一下 每個QQ有很多不同好友,資料庫如何設計會更方便?
應該超出我的能力了,想看看大家有什麼 idea...
------解決方案--------------------
一個兩欄位的表
一萬個QQ全部互為好友,則記錄數也就一億
而事實上連十分之一都不會到
------解決方案--------------------
id myid friendid
搞定。
這是最好的設定辦法,對伺服器要求最低。
------解決方案--------------------
兩個表 用個qq表 一個關係表
------解決方案--------------------
1.QQ會員表
每個用戶一條記錄
id,nickanme, 等。
2.QQ好友關係表
id, myid, friendid
3.QQ黑名單表
id myid blackid
4.資訊表,這裡建議使用分表
按用戶id來分表,每2000個用戶一個資訊表,例如 id=5000的用戶 分表應該是 5000/2000 再取整,即2,所以表應該是message_0002
id fromid, toid,message, addtime.
------解決方案--------------------
一個表。
CREATE TABLE `qq_friends` (
`my_id` bigint(13) NOT NULL,
`friend_id` bigint(13) NOT NULL,
`is_black_id` tinyint(1) NOT NULL DEFAULT '0',
`add_date` TIMESTAMP(10) NOT NULL,
PRIMARY KEY (`my_id`,`friend_id`),
KEY `my_id` (`my_id`),
KEY `add_date` (`add_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
建議用InnoDB,行鎖而不是表鎖
放棄自增ID(你用它幹什嗎?排列大小?)
PRIMARY KEY 設定本Q ID和朋友ID的組合
本Q ID和加入時間分別加上索引
is_black_id(是否黑名單,0,1來儲存)
如1樓所說,由於是交叉記錄,一萬個QQ全部互為好友,則記錄數也就一億(實際肯定小於),但是資料庫也會很驚人。所以要考慮分庫或者資料庫叢集(每100萬個號一個庫,若干庫一個伺服器)