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

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

WBOY
WBOYOriginal
2016-06-13 12:01:411056browse

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn