首页 » 网站推广 » php石友流程技巧_分享一个石友系统的数据库设计实现聪明的轨范员都邑这样设计PHPMYSQL

php石友流程技巧_分享一个石友系统的数据库设计实现聪明的轨范员都邑这样设计PHPMYSQL

访客 2024-12-11 0

扫一扫用手机浏览

文章目录 [+]

最近我手头的一个网站,新增了社交功能,用户可以相互加好友。

常日来说,对好友列表设计是新增一个好友,就往好友列表处新增一行,当要查询一个用户好友的时候

php石友流程技巧_分享一个石友系统的数据库设计实现聪明的轨范员都邑这样设计PHPMYSQL

我们会这样子做

php石友流程技巧_分享一个石友系统的数据库设计实现聪明的轨范员都邑这样设计PHPMYSQL
(图片来自网络侵删)

这是user表格

SELECT FROM WHERE userid=\"大众100\"大众

userid nickname

01 小A

02 小B

03 小C

这是friendlist表格

user_id friend_id

01 101

02 102

03 103

后面让我来剖析一下我的思路

把所有好友以键值对(键=userid,值=昵称)添加到数组中,由于userid在users表中是唯一的,以是不用担心键会重复,把数组序列化(serialize)存入friend_id里面,

当读取好友表时反序列化得到数组,比如:array('101'=>'小苍','102'=>'joker','103'=>'JY'),这个表示用户100的好友,这样有一个好处,便是可以直接显示好友的昵称,不用再查users表得到好友的昵称。

在这里强调一下,把数组插入数据库之前,一定要对数组序列化,不然当取出的时候,单个字符表示数组中的一个元素,而不是一组键值对。

table:friendlist

userid friend_id

100 a:3:{ i: 101; s: 4:\公众小苍\公众; i: 102; s: 5:\"大众joker\公众; i: 103; s: 2:\公众JY\"大众; }

101 a:2:{i:102;s:5:\"大众joker\"大众;i:103;s:2:\公众JY\"大众;}

这样的好友存储设计在用户量百万级以上用户量的时候效果非常明显。

假设一个社交网站有110W的用户,均匀每个用户好友数为25个,那么数据库就有110W 25 = 2750W行,如果用户量和人均好友数上升,那么friendlist表行数超亿是有可能的。

更如腾讯新浪用户亿级别的,好友数量几百上千,新增一个好友新加一行显然是行不通的。

以数组形式存储好友,每个用户的好友列表只占一行,如果新增好友的话,只需往数组添加键值对就OK了。
这种方法有点事减少了数据库的开销,但是把添加键值对、序列化和反序列化任务交给了web做事器,增加了做事器开销,二者之间要有个权衡。

欢迎大家添加我的|喂-~鈊|:H|F|C|零|五|二四领取

大家有问题的可以相互磋商

在互联网上我以为每个人都要有乐于分享,乐于助人的精神,反正我做到了!

标签:

相关文章