我们讨论一下 每个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万个号一个库,若干库一个服务器)