首頁  >  文章  >  後端開發  >  我们讨论一下 每个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