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

2023-05-16

出处: 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取模分裂


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新浪微博,腾讯微博mysql数据库主表猜想 的相关文章

  • 指定magento后台使用的theme

    众所周知 xff0c magneto是能后台配置中指定前台使用的是哪个theme xff0c 但后台呢 xff1f 指定后台的theme xff0c 需要在添加如下的配置 xff1a lt config gt lt stores gt lt
  • MySQL 数据库性能优化之表结构优化

    作者 xff1a Sky Jian 可以任意转载 但转载时务必以超链接形式标明文章原始出处 和 作者信息 及 版权声明 链接 xff1a http isky000 com database mysql perfornamce tuning
  • MySQL 数据库性能优化之索引优化

    作者 xff1a Sky Jian 可以任意转载 但转载时务必以超链接形式标明文章原始出处 和 作者信息 及 版权声明 链接 xff1a http isky000 com database mysql performance tuning
  • MySQL 数据库性能优化之SQL优化

    作者 xff1a Sky Jian 可以任意转载 但转载时务必以超链接形式标明文章原始出处 和 作者信息 及 版权声明 链接 xff1a http isky000 com database mysql performance tuning
  • “巨型”的ESP8266模块,快来围观。

    作者 xff1a 晓宇 xff0c 排版 xff1a 晓宇 微信公众号 xff1a 芯片之家 xff08 ID xff1a chiphome dy xff09 01 巨型ESP8266 ESP8266几乎无人不知 xff0c 无人不晓了吧
  • MySQL数据库性能优化之存储引擎选择

    作者 xff1a Sky Jian 可以任意转载 但转载时务必以超链接形式标明文章原始出处 和 作者信息 及版权声明 链接 xff1a http isky000 com database mysql performance tuning s
  • 配置magento后台翻译

    同事在magento中添加了若干翻译 xff0c 但总是没法再后台显示 xff0c 我帮忙查了很久 xff0c 终于找到问题所在了 xff0c 原来没有配置对应module的后台翻译文件 xff0c 所以在后台显示不出翻译 这里贡献一份前后
  • apache安装新模块的方法

    1 检查是否安装 a 编译安装http bin apachectl l grep mod expires b 如果是以DSO方式编译的 xff0c 则查看 ll modules grep expires 注意 xff0c 以上两种情况不能同
  • prototype.js中hide()和show()的一个注意事项

    在项目中遇到一个问题 xff0c 用prototype js的show xff08 xff09 方法要设置某个div为display block 但总是没法成功 xff0c 后来查了手册 xff1a http api prototypejs
  • doxygentoolkit.vim 用法

    http blog chinaunix net space php uid 61 20570759 amp do 61 blog amp id 61 1922274 早就安上了这个东西 xff0c 只是一直没研究它怎么用 因为 emacs
  • 一些vim知识的摘录

    h function list 看内置函数 b name variable local to a buffer w name variable local to a window g name global variable also in
  • 为什么 Vim 使用 HJKL 键作为方向键

    出处 xff1a http blog jobbole com 18650 导读 xff1a 关于这个问题 xff0c 以前网络上有一种说法 xff0c 手指放在键盘上输入时 xff0c HJKL 比方向键距离手指更近 xff0c 自然输入效
  • 蚂蚁变大象:浅谈常规网站是如何从小变大的(一)

    http zgwangbo blog 51cto com 4977613 849529 标签 xff1a 架构 web 原创作品 xff0c 允许转载 xff0c 转载时请务必以超链接形式标明文章 原始出处 作者信息和本声明 否则将追究法律
  • 【转】高效使用vim

    出处 xff1a http www cnblogs com hyddd archive 2010 04 08 1706863 html 英文出处 xff1a jmcpherson org editing html 翻译引用 xff1a ti
  • 浅谈HTTP中Get与Post的区别

    http www cnblogs com hyddd archive 2009 03 31 1426026 html Http定义了与服务器交互的不同方法 xff0c 最基本的方法有4种 xff0c 分别是GET xff0c POST xf
  • PID算法搞不懂?看这篇文章就够了。

    点击上方 大鱼机器人 xff0c 选择 置顶 星标公众号 福利干货 xff0c 第一时间送达 xff01 转自知乎 xff1a jason 原文链接 xff1a https zhuanlan zhihu com p 74131690 1 目
  • Http Message结构学习总结

    http www cnblogs com hyddd archive 2009 04 19 1438971 html 最近做的东西需要更深入地了解Http协议 xff0c 故死磕了一下RFC2616 xff0d HTTP 1 1协议 xff
  • 浅析数字证书

    出处 xff1a http www cnblogs com hyddd archive 2009 01 07 1371292 html hyddd原创 xff0c 转载请说明出处 gt 最近看会Session hijack的东西 xff0c
  • Cookie小记

    出处 xff1a http www cnblogs com hyddd archive 2008 12 26 1363229 html 最近在工作上经常看一些安全相关的东西 xff0c Cookie以前看过 xff0c 但了解不深 xff0
  • Session小记

    出处 xff1a http www cnblogs com hyddd archive 2008 12 29 1364646 html 看了一些Session的资料 xff0c 在这里再总结一下Session相关的知识 很多是从网上搜集的资

随机推荐

  • 点击<a href="#"/>后屏幕滚动问题

    问 xff1a 当 lt a href 61 34 34 gt 点击后屏幕会滚动到最上面 xff0c 有啥办法不让屏幕滚动 xff1f 答 xff1a href 61 34 javascript void 0 34 或 nclick 61
  • 内存管理知识

    原创作品 xff0c 允许转载 xff0c 转载时请务必以超链接形式标明文章 原始出处 作者信息和本声明 否则将追究法律责任 http xqtesting blog 51cto com 4626073 808548 一般的程序语言 xff0
  • 用户体验:别让我想,别让我停!

    http xqtesting blog 51cto com 4626073 813561 在交互设计中 xff0c 存在着几条普遍的法则令网页设计更有效 最重要的一条是 别让我思考 xff0c 越简洁越好 比如不要因为奇怪的表达方式强迫用户
  • MySQL慢查询的两种分析方案 slow sql

    http blog csdn net ylqmf article details 6541542 前一段日子 xff0c 我曾经设置了一次记录在MySQL数据库中对慢于1秒钟的SQL语句进行查询 想起来有几个十分设置的方法 xff0c 有几
  • 如何使用SQL Profiler 性能分析器

    http blog csdn net ylqmf article details 6541625 ysql 的 sql 性能分析器主要用途是显示 sql 执行的整个过程中各项资源的使用情况 分析器可以更好的展示出不良 SQL 的性能问题所在
  • magento中生成https链接的简单方法

    有关magento中https的基础知识 xff0c 请看 magento中的启用https 如果是在项目的后期才决定采用https xff0c 那么就要面临一个问题 xff1a 大量的生成url的代码需要修改 xff0c 这是一个很大的工
  • 树莓派无屏幕连接WiFi

    将刷好 Raspbian 系统的 SD 卡用电脑读取 在 boot 分区 xff0c 也就是树莓派的 boot 目录下新建 wpa supplicant conf 文件 xff0c 按照下面的参考格式填入内容并保存 wpa supplica
  • MySQL数据库存储引擎MyISAM和InnoDB的对比详解

    http www mysqlops com 2011 12 09 myisam E5 92 8Cinnodb E5 AF B9 E6 AF 94 E8 AF A6 E8 A7 A3 html 之前Eugene兄已经写过两篇关于myisam转
  • 为什么magento的rewrite方法对抽象类无效

    magento中 xff0c 是没法通过Mage getModel 34 xx xx 34 配合xml中的 lt rewrite gt 实现abstruct class的rewrite 为什么 xff1f 这需要详细了解一下magento中
  • magento中在.htaccess设置website code

    在 htaccess中 xff0c 添加以下的内容 xff1a SetEnvIf Host www newjueqi com MAGE RUN CODE 61 newjueqi SetEnvIf Host www newjueqi com
  • apache两种工作模式详解

    http blog chinaunix net space php uid 61 20541969 amp do 61 blog amp id 61 351485 刚接触这两个配置时很迷糊 xff0c 全部开启或全部注释没有几多变化 今天搜
  • Apache处理http请求的生命周期

    Apache请求处理循环详解 Apache请求处理循环的11个阶段都做了哪些事情呢 xff1f 1 Post Read Request阶段 在正常请求处理流程中 xff0c 这是模块可以插入钩子的第一个阶段 对于那些想很早进入处理请求的模块
  • 提高MySQL插入记录的速度

    http hi baidu com jackbillow blog item 65ea47248f645521d50742e7 html 在myisam engine下 1 尽量使用insert into table name values
  • 最常用的http状态码

    200 OK 找到了该资源 xff0c 并且一切正常 202 Accepted 服务器已接受请求 xff0c 但尚未处理 amp bsp 301 Moved Permanently 被请求的资源已永久移动到新位置 302 Found 请求的
  • shell中通过ftp批量上传文件

    为了在shell中上传文件 xff0c 需要避免在控制台中通过交互的方式输入ftp的登录密码 xff0c 这时要安装一个强大的ftp命令行工具 xff1a lftp xff0c 通过lftp登录ftp服务器的格式如下 xff1a lftp
  • 你可能不了解的strtotime函数

    出处 xff1a http www phppan com 2011 06 php strtotime 作者 xff1a 胖胖 在前面的文章中 xff0c 我们提到strtotime函数在使用strtotime 1 month 求上一个月的今
  • PHP的词法解析器:re2c

    出处 xff1a http www phppan com 2011 09 php lexical re2c 作者 xff1a 胖胖 re2c是一个扫描器制作工具 xff0c 可以创建非常快速灵活的扫描器 它可以产生高效代码 xff0c 基于
  • 由浅入深探究mysql索引结构原理、性能分析与优化

    出处 xff1a http www phpben com post 61 74 摘要 xff1a 第一部分 xff1a 基础知识 第二部分 xff1a MYISAM 和 INNODB 索引结构 1 简单介绍 B tree B 43 tree
  • php的strtotime函数源码分析

    最近想实现一个多语言版的strtotime函数 xff0c 所以阅读了php源码中strtotime函数的实现 xff0c 很感谢 胖胖 大大的文章 xff08 http www phppan com 2011 06 php strtoti
  • 新浪微博,腾讯微博mysql数据库主表猜想

    出处 http blog csdn net cleanfield article details 6339428 注意 xff0c 原文下面的评论也是难得的学习资料 xff0c 千万不能错过 用户信息表 xff08 t user info