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