search
HomeDatabaseMysql Tutorial新浪微博,腾讯微博mysql数据库主表猜想

出处:http://blog.csdn.net/cleanfield/article/details/6339428 注意,原文下面的评论也是难得的学习资料,千万不能错过 用户信息表(t_user_info) 字段名称 字节数 类型 描述 User_id 4 uint32 用户编号(主键) User_name 20 Char[20] 名称 Msg_count 4

出处: http://blog.csdn.net/cleanfield/article/details/6339428


注意,原文下面的评论也是难得的学习资料,千万不能错过


用户信息表(t_user_info)

字段名称

字节数

类型

描述

User_id

4

uint32

用户编号(主键)

User_name

20

Char[20]

名称

Msg_count

4

uint32

发布消息数量,可以作为t_msg_info水平切分新表的auto_increment

Fans_count

4

uint32

粉丝数量

Follow_count

4

Uint32

关注对象数量

备注:以User_id取模分表

 

用户之间关系表(t_user_relation),必须有关注与被关注的关系

字段名称

字节数

类型

描述

User_id

4

uint32

用户编号(联合主键)

Follow_id

4

uint32

被关注者编号(联合主键)

Type

1

Uint8

关系类型(0,粉丝;1,关注)

备注:关系是单向的,以User_id取模分表

 

用户消息索引表(t_uer_msg_index)

字段名称

字节数

类型

描述

User_id

4

uint32

用户编号(联合主键)

Author_id

4

uint32

消息发布者编号(可能是被关注者,也可能是自己)(联合主键)

Msg_id

4

uint32

消息编号(由消息发布者的msg_count自增)(联合主键)

Time_t

4

Uint32

发布时间(必须是消息元数据产生时间)

备注:此表就是当我们点击“我的首页”时拉取的消息列表,只是索引,Time_t对这些消息进行排序

 

消息与消息关系表(t_msg_msg_relation)

字段名称

字节数

类型

描述

Reference_id

4

uint32

引用消息用户编号(联合主键)

Reference _msg_id

4

uint32

引用消息编号(联合主键)

Referenced_id

4

uint32

消息发布者编号

Referenced _msg_id

4

uint32

被引用消息编号

Type

1

Uint8

操作类型(1,评论;2,转发)

Time_t

4

Uint32

发布时间

Page_index

4

Uint32

转发或者评论页码

备注:以Reference_id取模分表。

腾讯微博比新浪微博好的一点是一个消息的所有评论和转发都是被固定页码,这样在点击看评论的时候搜索效率更高,因为多了一个where Page_index的定位条件,当然带来的问题就是可能看到有些页的评论排版并不是满页,这就是因为标识为这个Page_index的评论有删除操作。

 

消息元数据表(t_msg_info)

字段名称

字节数

类型

描述

User_id

4

uint32

发消息用户编号(联合主键)

Msg_id

4

uint32

消息编号(联合主键)

Content

140

Char[140]

消息内容

Type

1

Uint8

消息类型(0,原创;1,评论;2,转发)

Commented_count

4

Uint32

评论过数量(只增不减,删除评论不影响此值,可以作为评论多页显示的页码)

Comment_count

4

Uint32

保留的评论数量

Transferred_count

4

Uint32

转发过数量(只增不减,删除转发不影响此值,可以作为转发多页显示的页码)

Transfer_count

4

Uint32

保留的转发数量

Time_t

4

Uint32

发布时间

 备注:消息元数据中,content像可能存在图片,这部分可以在分布式文件系统中存储。在2011年数据库大会上听杨海潮的演讲,对于nosql 也有涉及,本人能力有限,对这部分的职责还不清楚,希望高人指点。

 

非常推崇杨海潮ppt中的归档做法,因为微博是有时间轴线的,对于一定时间之前的记录可以分层次归档,这样在前端的最新的数据表的压力就会减轻很多。

 

业务逻辑:

1.A关注B

1)在t_user_relation_A中添加

A

B

1

2)在t_user_relation_B中添加

B

A

0

2.原创发消息

1)在t_msg_info_A中添加这条元消息,type为0

2)更新t_user_info_A中Msg_count

3)在t_uer_msg_index_A中插入A发的这条消息的索引(A的编号和消息编号)

4)在t_user_relation_A中找到所有关注A的人,比如B,C,D,E,F等等,并发在这些用户的t_uer_msg_index中插入A的这条信息索引,比如名人微博可以并发多个进程来实现对粉丝的消息同步

3.A转发B的消息msg_b

1)在t_msg_info_A中添加这条元消息msg_a,type为2

2)更新t_user_info_A中Msg_count

3)在t_uer_msg_index_A中插入A发的这条消息的索引(A的编号和消息编号)

4)在t_msg_info_B中更新msg_b的Transferred_count和Transfer_count

5)在t_msg_msg_relation中添加User_a,msg_a与User_b,msg_b的转发关系,page_index为Transferred_count%page_count

4.A评论B的消息msg_b

1)在t_msg_info_A中添加这条元消息msg_a,type为1

2)更新t_user_info_A中Msg_count

3)在t_uer_msg_index_A中插入A发的这条消息的索引(A的编号和消息编号)

4)在t_msg_info_B中更新msg_b的Commented_count和Comment_count

5)在t_msg_msg_relation中添加User_a,msg_a与User_b,msg_b的评论关系,page_index为Commented_count%page_count

5.A删除消息msg_a

1)删除t_msg_info中的元数据msg_a

2)删除t_uer_msg_index_A中的User_a,msg_a行记录

3)备注:如果A的msg_a被别人评论或者引用,那么在对方查看评论或者转发的时候会提示“原消息已被作者删除”

6.A删除转发消息msg_a

1)删除t_msg_info_A中的元数据msg_a

2)删除t_uer_msg_index_A中的User_a,msg_a行记录

3)在t_msg_msg_relation_A表中找到msg_a的源消息,即B的msg_b

4)删除t_msg_msg_relation_A中user_a,msg_a和user_b,msg_b的转发关系

5)更新t_msg_info_B中msg_b记录的Transfer_count,减1

7.A删除评论消息msg_a

1)删除t_msg_info_A中的元数据msg_a

2)删除t_uer_msg_index_A中的User_a,msg_a行记录

3)在t_msg_msg_relation_A表中找到msg_a的源消息,即B的msg_b

4)删除t_msg_msg_relation_A中user_a,msg_a和user_b,msg_b的评论关系

5)更新t_msg_info_B中msg_b记录的Commecnt_count,减1

8.A拉取全部消息

1)从t_uer_msg_index_A中拉取Author_id,Msg_id,Time_t索引,并以Time_t排序

2)通过页码和每页count控制返回结果数量,这样避免了server io 压力冲击

 

5月25日更新:

1)条件允许的话,所有的index表可以放到内存中,全部cache,而元数据直接ssd,这样读速度会提高很多,当然也要做好热备

2)t_user_relation表最好做合并存储

 

5月27日更新:

1)在第二步原创发消息要通知给粉丝,这时如果是明星,那么推送的数量可能数百万,新浪采取的做法是对这数百万粉丝进行区别对待,按照活跃度划分为几个层级,每个层级有一个推送时效限定,这样可以做到最想看到这个信息的人能够最及时的看到明星动态

2)用硬件来提升速度,将所有index表放在memory上,元数据放在ssd上,数据可以现在这两层上做处理,并定时持久化到mysql中

3)提供批量处理接口,比如拉取最新更新索引

4)在一定限度上容忍不一样,但要实现最终一致性

 

6月1日更新:

本文用的是push模式,关于微博的pull模式,请参见 http://blog.csdn.net/cleanfield/archive/2011/05/27/6450626.aspx

 

6月30日更新:

在新浪微博中,评论和转发都与原创消息是一样的独立记录,只不过多了一条消息关系记录,在展现的时候除了要展现自己添加的转发内容或评论内容之外,还需要将最原始的那条目标消息取出来。


12月8日更新:

消息与消息关系表(t_msg_msg_relation)的备注中,应该是以Referenced_id取模分裂


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
微博怎么改名字 怎么修改微博昵称微博怎么改名字 怎么修改微博昵称Feb 22, 2024 pm 04:46 PM

打开微博并点击头像,在个人简介中找到编辑基本资料,选择昵称修改即可。教程适用型号:iPhone13系统:iOS15.3.1版本:微博12.1.0解析1首先在手机桌面上找到并点击打开微博app。2然后进入我页面,点击个人头像。3点击个人头像进入后,点击展开个人简介。4然后点击查看和编辑基本资料。5接着选择昵称选项。6最后输入新名称,点击确定即可。补充:微博怎么注销1首先打开微博,然后点击我页面中的设置选项。2接着点击账号与安全里的微博安全中心。3点击其他账号类问题选项。4然后点击如何注销微博账号。

微博怎么批量删除微博?-微博怎么注销账号?微博怎么批量删除微博?-微博怎么注销账号?Mar 18, 2024 pm 03:00 PM

微博怎么批量删除微博?要批量删除微博,您可以按照以下步骤操作:登录微博账号,并在浏览器中访问您的个人中心。点击管理中心或应用下的更多,然后选择我的应用。在应用市场中搜索并找到批量删除微博工具。使用该工具,您可以选择勾选部分微博删除,或者选择一次性全部删除。完成删除操作后,如果需要在24小时内恢复已删除的内容,可以使用会员特权“后悔药”。超过24小时则无法使用此功能。此外,还有其他方法可以实现批量删除微博,例如使用特定的浏览器插件,但这些方法可能不是官方支持的,且存在安全风险。因此,建议优先使用官

微博评论图片怎么发送 图片评论发送方法详解微博评论图片怎么发送 图片评论发送方法详解Mar 12, 2024 pm 05:22 PM

  我们用户在使用这款平台的时候,尤其是在刷别的用户们所发布的一些内容的时候,上面不是可以进行对于自己方面的一些进行了解对不对,支持评论等,很多有意思的一些操作,像我们想要在评论上面发送一些图片,但是可能都不是很清楚,平常对于发表评论方面时是基本上的一些文字的形式,所以相对说的图片也是让很多用户们可能都比较的疑惑,所以今日小编就来给大家们好好的讲解一下其中的内容乐趣,让大家们可以充分的了解到相关的操作方法,更多的内容资讯都在等着用户们,效果还是完全不同的,赶紧和小编一起来看看吧,我相信你会喜欢的

微博怎么注销账号 微博账号怎么永久注销微博怎么注销账号 微博账号怎么永久注销Feb 22, 2024 pm 07:25 PM

进入账号与安全设置的微博安全中心即可进行注销。教程适用型号:iPhone13系统:iOS15.3版本:微博12.5.4解析1首先进入微博我的页面中,点击右上角的设置图标。2进入设置页面中,点击账号与安全。3进入账号与安全页面后,点击微博安全中心。4进入微博安全中心页面后,点击如何注销微博账号。5最后点击下一步,根据提示即可进行注销。补充:微博注销反悔期间可以继续登录吗1微博注销反悔期间可以继续登录。微博完成注销操作后,有14天的反悔期,在此期间可以正常登录,但登录后会自动撤销账号注销申请。如果反

微博网页版入口微博网页版入口Feb 23, 2024 pm 10:52 PM

微博是能够通过网页登录的,那么网页版入口是什么呢?用户们只需要输入https://weibo.com/就能够登录网页微博。然后就能够直接在上面搜索需要的内容了。这篇微博之夜2024年举行地点介绍就能够告诉大家具体内容,下面就是详细介绍,赶紧看看吧!微博使用教程微博网页版入口网址分享:https://weibo.com/网站介绍:1、可以在搜索栏里搜索自己相看的具体微博。2、能够在下面看到最新的热门微博是什么。3、可以在这个页面里看到最新热门的话题。

微博怎么添加通讯录好友?-微博怎么加好友?微博怎么添加通讯录好友?-微博怎么加好友?Mar 18, 2024 pm 12:34 PM

微博怎么添加通讯录好友?1、打开手机版微博,进入微博主界面2、点击“我”-“添加好友”3、点击“通讯录”-“查看全部联系人”4、选择通讯录里的好友进行关注即可微博怎么加好友?①“我”页面上方“+”-微博找人②关系中心右上角-发现用户③“发现”页面-找人④在微博客户端【发现】页面,输入好友的微博昵称,点击输入法中的【搜索】按钮进行搜索添加也是可以的,记得一定要点击【搜索】按钮哦~

微博怎么不让别人看到我的关注?-微博怎么查看访客记录?微博怎么不让别人看到我的关注?-微博怎么查看访客记录?Mar 18, 2024 am 11:22 AM

微博怎么不让别人看到我的关注?我们只需要把博主分类到【悄悄关注】这个分组里面,别人就看不到自己关注了他。1、打开手机微博,点击首页的【关注】。2、在“我的分组”中点击【悄悄关注】即可。微博怎么查看访客记录?1、微博测试的访客记录功能目前只有SVIP和VVIP可以看到,而且仅针对部分用户开放。2、用户可以在个人中心下方的【更多功能】里找到访客记录入口,可以查看访问人数、访问对象以及访问较为频繁的人。3、该功能仅向SVIP和VVIP用户开放,普通用户和普通会员用户暂时无法使用。4、总之,微博测试访客

微博怎么添加表情包 微博添加表情包教程微博怎么添加表情包 微博添加表情包教程Mar 14, 2024 am 11:31 AM

  微博怎么添加表情包?在微博这款app中不知道小伙伴们喜不喜欢使用这款app和好友聊天,或者是通过这款app认识的网友,使用这款app聊天的人不多,但总归是有的,而且这款app还可以对其他用户的微博内容进行评论,总之呢,表情包在这这款app也是非常重要的内容之一!不知道小伙伴们有没有很多表情包可以使用呢?有些小伙伴相册中保存了不少表情包,但是不知道如何将其上传到app上,让我们一起看看吧!微博添加表情包方法  1、在手机上打开【微博】,进入后,点击页面底部的【消息】  2、点击一个群聊进入,点

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)