我们讨论一下 每个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万个号一个库,若干库一个服务器)
一个两字段的表
一万个QQ全部互为好友,则记录数也就一亿
而事实上连十分之一都不会到