前提

微信朋友圈是我们每天都在用的功能, 但是如果让你来实现一个微信朋友圈, 你会如何做呢? 我来简单设想一下.

实现功能

  1. 发朋友圈
  2. 评论动态
  3. 查看朋友圈(只能查看好友的)
  4. 查看评论(只能查看共同好友的)

是不是看着很简单? 也没有几个功能嘛. so easy.

开始实现

数据库选用了MySQL, 熟悉的关系型数据库

版本一

看了只有两条内容, 朋友圈动态, 朋友圈评论, 直接设计数据库.

简单吧. 好, 按照这个数据模型, 当实现时, 就会发现问题.

1.如何获取好友圈数据

如果简单的拉取好友列表, 然后拉取出其中好友的动态, 不好意思, 你的接口慢到爆炸, 毕竟用户基数就在那.

2.如何获取动态下的共同好友评论

当然, 评论也可以获取动态下的所有评论, 然后过滤掉非好友的评论, 同上, 太慢了.

想想哈

如何解决这个问题? 上面获取数据慢主要是因为要做数据的筛选, 那如果我能够直接拿到最终数据, 不就可以解决这个问题了么?

版本二

为了能够直接获取到朋友圈的数据, 在现有基础上是肯定不行的, 根据获取数据的思路, 直接获取朋友圈数据, 当然要加一张朋友圈的表了.

新增一张朋友圈表:

这样就很方便了, 用户查看朋友圈时, 可以直接定位查看的动态以及可以查看的评论, 在根据动态ID和评论ID将内容补充进去就行了.

但是相应的, 就需要维护用户朋友圈这样的一张表, 在用户发帖删帖加好友删好友发评论删评论的时候, 去做数据的同步操作, 而且要异步的进行, 毕竟同步的话, 接口响应就会变慢. 但是我觉得, 这样的代价是值得的, 可以换来拉取数据接口的快速响应.

你以为到这就完了么? 天真. 看下图:

这样的消息在朋友圈都看到过吧. 它应该是所有用户都可以看到的, 可以将它理解为官方发的动态. 如果按照我们现在的设计, 就要将它插到所有用户的朋友圈中, 也就是说, 如果官方发一条动态, 有一百万用户的话, 就要插一百万条同样的数据, 而且有新注册用户, 还要将历史数据插进去. 这样不只难以维护, 而且有太多无用数据了.

想想哈

这种数据最好只需要插入一条, 所有用户都去读就好. 最直观的方法, 在朋友圈表中, 指定一个用户ID(比如0), 是所有用户共同的数据, 这样就解决了

但是, 之前我们的评论是直接保存到朋友圈中的, 可以这样保存, 是因为每个用户在朋友圈表中的每个动态是唯一的, 但是现在如果插入公共ID, 就不能这么存了, 哪又该如何处理动态的评论呢? 难道回到开始的动态查询吗?

既然有用户的朋友圈动态表, 那就可以有朋友圈评论表, 朋友圈动态中保存的是用户可以查看的动态, 那么朋友圈评论表保存的就是用户可以查看的评论.

版本三

修改用户朋友圈表结构如下:

这样改动之后, 维护的数据和版本二基本一样, 而且也解决了版本二的问题.

来看看现在的相关操作

查看朋友圈

  1. 朋友圈动态查找可以查看的动态(包含用户ID和公共ID)
  2. 朋友圈评论查看相关评论(包含用户ID和公共ID)
  3. 动态表和评论表根据ID将相关数据取出

前两步走索引, 第三步直接根据主键获取, 而且拿出来的没有无用数据

数据维护的操作(一下所有操作官方特判)

发动态

  1. 查找用户所有好友
  2. 将动态添加到所有好友的朋友圈动态表中(包括用户自己)

删动态

  1. 查找用户的所有好友
  2. 将动态从好友的朋友圈动态表中删除
  3. 将动态从好友的朋友圈评论表中删除

发评论

  1. 查找用户的所有好友A
  2. 朋友圈动态中找出A可以查看此动态的好友B
  3. 若评论是回复某用户, 则从B中过滤不是回复用户好友的用户, 得到C
  4. 将数据添加到C朋友圈评论表中

删评论

  1. 查找用户的所有好友A
  2. 朋友圈评论中找出A中可以查看此评论的用户B
  3. 删除B朋友圈评论数据

添加好友

  1. 找到好友的所有动态, 添加到用户的朋友圈动态
  2. 找到好友在用户朋友圈动态中所有动态下的相关评论(包括评论和被评论), 并从中过滤掉用户不可查看的评论, 同步好友圈评论

删除好友

  1. 找到好友在用户朋友圈动态中所有动态下的相关评论, 删除用户好友圈评论数据
  2. 找到好友的所有动态, 从用户的朋友圈动态中删除

以上, 基本就是我目前的设想


总结

可以看到, 最终的版本, 基本所有的逻辑都在异步数据的同步上, 业务逻辑基本很少, 这样可以保证拉取数据的接口快速响应, 但因为是异步操作, 难免会造成数据的延迟. 比如说: 当处理数据过大时, 用户发了动态, 但是还没有做异步的处理, 他的好友时看不到他刚刚发表的动态的.

以及可能存在的其他暂时没有发现的问题. 先这样, 没有更好的想法了.

以上!!!

微信朋友圈技术实现设想相关推荐

  1. 微信朋友圈技术之道:三个人的后台团队与每日十亿的发布量

    概述 截止到2015年7月,微信每月活跃用户约5.49亿,朋友圈每天的发表量(包括赞和评论)超过10亿,浏览量超过100亿.得益于4G网络的发展,以上数据仍有很快的增长,而且相对于PC互联网时代,移动 ...

  2. IM开发技术学习:揭秘微信朋友圈这种信息推流背后的系统设计

    本文由徐宁发表于腾讯大讲堂,原题"程序员如何把你关注的内容推送到你眼前?揭秘信息流推荐背后的系统设计",有改动和修订. 1.引言 信息推流(以下简称"Feed流" ...

  3. 总结学过的技术,实现加密注册,登录及过期不能访问,微信朋友圈功能,文章比较长,但是比较详细。

    一.可以使用的技术 开发环境 idea,node.js 技术 虚拟机 Linux,docker mysql,redis jdbc,jsp,servlet mybatis,mybatis-plus sp ...

  4. 揭秘微信朋友圈这种信息推流背后的系统设计

    1.引言 信息推流(以下简称"Feed流")这种功能在我们手机APP中几乎无处不在(尤其是社交/社群产品中),最常用的就是微信朋友圈.新浪微博等. 对Feed流的定义,可以简单理解 ...

  5. 一文教你写出高效的软件测试用例!微信朋友圈动态发送为例

    编写一份好的测试用例需要:充分的需求分析能力 + 理论及经验加持. 但这并不意味着,没测试经验.分析能力弱就不能写好用例,还是有方法可循的.作为混迹测试职场 10 年的老人,给大家分享一些用例编写的心 ...

  6. 微信朋友圈信息流的系统设计

    引言 信息推流(以下简称"Feed流")这种功能在我们手机APP中几乎无处不在(尤其是社交/社群产品中),最常用的就是微信朋友圈.新浪微博等. 对Feed流的定义,可以简单理解为只 ...

  7. 微信朋友圈:应对春节千亿访问量背后的故事

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯技术工程官方号 微信朋友圈包括图片和视频两套业务架构组成,朋友圈图片的特点是请求量大.消耗计算资源较多,视频则主要消耗带宽.朋友圈的 ...

  8. Py:数据挖掘之对微信朋友圈好友的性别、区域、昵称、签名信息进行情感分析

    Py:数据挖掘之对微信朋友圈好友的性别.区域.昵称.签名信息进行情感分析 目录 输出结果 部分代码 输出结果 部分代码 #Py:数据挖掘之对微信朋友圈好友的性别.区域.昵称.签名信息进行情感分析--J ...

  9. 你的微信朋友圈让你焦虑了吗?

    小咖导读:不管休假不休假,我们都已经越来越依赖于微信,坐下来刷刷朋友圈,几乎是很多人每天打发碎片化时间的最好方式.当天长日久,刷朋友圈的时候你有没有不快乐?技术在给每个人提供便利和效率的时候,社会性又 ...

最新文章

  1. 009-SDK框架之LYWSDKPlatform.h
  2. C# delegate与event,委托与事件
  3. python输入城市名称_python 查询天气(输入城市名,输出天气)
  4. CCIE理论-第八篇-SD-WAN(三)+DAI(动态ARP检测)
  5. 【JEECG技术文档】JEECG online 表单填值规则使用说明
  6. 人工智障学习笔记——机器学习(15)t-SNE降维
  7. BS结构浏览器网页读写IC卡技术汇总
  8. 深度装机大师一键重装_就算是电脑小白也能使用自如的重装软件,了解一下?...
  9. matlab logistic拟合,用matlab拟合Logistic,4参数logistic
  10. Linux — 安装JDK 使用rpm命令安装
  11. Java中怎么打开jsp_jsp文件怎么打开 打开jsp文件的详细步骤【详细介绍】
  12. 怎么设置计算机显示列表格式,(怎样显示excel的文件后缀名)excle后缀格式怎么显示...
  13. C语言一些常用结点和结点操作
  14. windows server 2012r2 standar 安装 vc++2015失败
  15. 南方科技大学计算机图灵奖,南方科技大学到底算什么级别啊?
  16. android 开发游戏_Android游戏开发–基本游戏循环
  17. shl 和 shr
  18. 界面设计的三大原则及细节分析
  19. 如何解决visual studio提示使用_CRT_SECURE_NO_WARNINGS的问题
  20. html5中的localStorage 临时存储

热门文章

  1. numpy求矩阵的逆和伪逆
  2. 用Excel做一次数据分析(二)——一次简单的分析
  3. vb雅西高速计算机考试,2016年高中信息技术学业水平考试VB程序复习题.doc
  4. 小米路由器SSH资料攻略
  5. 数字货币钱包 HD Wallet的助记词和种子的生成原理(BIP39)
  6. Android开发——使用ActivityLifecycleCallbacks监控App是否处于后台
  7. http://bbs.pediy.com/showthread.php?p=1365122
  8. SAP PI/PO 视频,自己录制
  9. 基于智能手机的加速计进行计步实现。
  10. Python 办公效率化学习(自学)三.Excel文件读取