数据库设计
简介:
本项目是一个视频点播服务端,主要有发视频,关注,点赞,评论,举报,消息推送等难点。
前提:
1、 项目有100万个视频源,1000万的用户量;
2、 使用mysql5.7,单库,无主从;
3、 服务器配置为4核20G内存8G硬盘;
目标:
使用上述的数据库与服务器,实现类似抖音的服务端,推送时并发每秒10000左右。
难点一:
关注、点赞、举报与评论的数据库设计。一千万的用户量,平均有百分之一约10万的用户两两之间进行关注,数据量是100亿,即使使用mysql的分表功能也是非常恐怖的事情。后来决定使用redis的位图功能来存储,每个用户都维护一张位图,需要1000000/(8*1024)=122MB的内存空间,10万的用户就是11920GB的内存。
难点二:
消息推送的数据库设计。当有新视频发布,则向粉丝们推送消息。如果所有的消息存储在一张表中,存储数据直线上升,无法持久,即使分表也难以长久。后来决定使用redis来存储,每个用户维护一个list链表,当用户粉丝数有1万时,就要向1万个链表里循环插入消息,当用户一起上传视频,高并发的时候,redis插入操作会是一个很耗时的事情。