>  기사  >  백엔드 개발  >  我们讨论一下 每个QQ有很多不同好友,数据库如何设计会更方便?

我们讨论一下 每个QQ有很多不同好友,数据库如何设计会更方便?

WBOY
WBOY원래의
2016-06-23 13:54:091152검색

我们讨论一下 每个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全部互为好友,则记录数也就一亿
而事实上连十分之一都不会到



原来老大都这么做,看来是我想太多了。。
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.