当前位置: 代码迷 >> PHP >> 小弟我们讨论一下 每个QQ有很多不同好友,数据库怎么设计会更方便
  详细解决方案

小弟我们讨论一下 每个QQ有很多不同好友,数据库怎么设计会更方便

热度:244   发布时间:2016-04-28 18:55:23.0
我们讨论一下 每个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万个号一个库,若干库一个服务器)