前提

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

实现功能

发朋友圈

评论动态

查看朋友圈(只能查看好友的)

查看评论(只能查看共同好友的)

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

开始实现

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

版本一

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

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

1.如何获取好友圈数据

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

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

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

想想哈

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

版本二

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

新增一张朋友圈表:

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

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

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

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

想想哈

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

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

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

版本三

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

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

来看看现在的相关操作

查看朋友圈

从朋友圈动态查找可以查看的动态(包含用户ID和公共ID)

从朋友圈评论查看相关评论(包含用户ID和公共ID)

从动态表和评论表根据ID将相关数据取出

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

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

发动态

查找用户所有好友

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

删动态

查找用户的所有好友

将动态从好友的朋友圈动态表中删除

将动态从好友的朋友圈评论表中删除

发评论

查找用户的所有好友A

从朋友圈动态中找出A可以查看此动态的好友B

若评论是回复某用户, 则从B中过滤不是回复用户好友的用户, 得到C

将数据添加到C的朋友圈评论表中

删评论

查找用户的所有好友A

从朋友圈评论中找出A中可以查看此评论的用户B

删除B的朋友圈评论数据

添加好友

找到好友的所有动态, 添加到用户的朋友圈动态中

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

删除好友

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

找到好友的所有动态, 从用户的朋友圈动态中删除

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

总结

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

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

以上!!!

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

  1. 请你设计一个微信朋友圈点赞的测试用例

    请你设计一个微信朋友圈点赞的测试用例 参考回答: 功能测试: 点赞某条朋友圈,验证是否成功 接口测试: 点赞朋友圈,验证朋友能否收到提示信息 性能测试 点赞朋友圈,是否在规定时间显示结果,是否在规定时 ...

  2. android朋友圈发文字换行,微信朋友圈全文展开 朋友圈文字怎么换行朋友圈发多行文字...

    微信朋友圈全文展开 朋友圈文字怎么换行朋友圈发多行文字 微信朋友圈全文展开 腾讯更新微信5.2.1版本,新版本特色有两个:发朋友圈时,可以附上你所在餐馆和景点的位置和名字.具体是情况是,用户在发送朋友 ...

  3. 如果让你设计一个微信朋友圈,你怎么设计

    这个问题当时把我问的萌币了 我想他大概是考察这切入点吧 1,分布式事务?CAP逻辑 C:一致性?的考察,比如我发了一个微信朋友圈,其他人都能及时的看到 2,微信朋友圈的可见和不可见的关系,就比如从我的 ...

  4. 来,设计个微信朋友圈-Feed流

    Feed流 更多内容移步个人blog : 来,教你设计朋友圈 什么是 朋友圈,微博,b 站抖音的推送,这些常用 app 的使用场景有一个共同的名词:Feed 流. Feed 流可以理解为一个数据流,将 ...

  5. 仅展示近三天的动态设置_微信朋友圈设置三天可见了吗?

    忘记从何开始微信朋友圈和微博都可以设置显示权限了,目的就是为了方便我们自行选择显示的权利,但是微信你们是否也开启了三天权限呢?说真的,我的朋友圈开启了,昨晚看见朋友圈疯转的一篇图文信息"微信 ...

  6. mfc让图片与按钮一起_微信朋友圈发图片还能添加语音,简单两步就能搞定!今天学到了...

    大家好,我是分享科技小达人~ 今天跟大家探讨的问题是:[微信朋友圈发图片添加语音的方法]. 日常生活中,我们都喜欢发朋友圈,今天就来教你如何在微信朋友圈,发送带语音的图片,方法非常简单,一起来学习一下 ...

  7. textisselectable长按再点击_微信朋友圈如何发布长视频?原来打开这个功能就可以,涨知识了...

    微信的朋友圈是我们与朋友家人分享动态的地方,在微信发过视频的小伙伴都知道,微信对发布视频时长时有严格要求的,如果发布的视频超过了15秒的话,是不能发布的. 那么,如何才能在微信朋友圈发布长视频呢?这就 ...

  8. h5分享到朋友圈_微信朋友圈创意招聘广告制作方法 H5模板

    微信朋友圈招聘广告发布出去那么久了,为啥还是没有求职者前来应聘呢?那么一定是你的招聘广告不够创意,所以没能吸引求职者的目光.如何才能制作一个有创意更吸引求职者眼球的招聘广告呢?现在你只需通过制作平台的 ...

  9. jsp文字上下居中显示_微信朋友圈又有骚技巧,一键设置居中签名,好友傻眼了...

    今日推荐:微信朋友圈签名居中 适用:安卓.苹果 大家好我是小雷,又来给大家安利微信小技巧了,今天给大家分享如何让你的朋友圈签名居中显示.熟悉微信的朋友都知道,在微信设置了个性签名之后,往往会同步到朋友 ...

  10. js sdk 一键分享 微信_微信朋友圈分享自己拍的视频,一键开启这个设置,自带文字和音乐...

    你分享到朋友圈视频,还是简单的随手一拍,然后分享吗?怎样让你的分享的视频看起来高端.大气.上档次呢?其实微信视频新增编辑功能.能剪辑,能加文字和音乐,还能添加表情包.让你的视频更好看. 1.拍摄阶段 ...

最新文章

  1. U3D协程Coroutine之WWW与Update()的并行测试
  2. 【算法漫画】:什么是红黑树?(整合版)
  3. 红米Note增强版出现”无法安装xxx ,请释放一些存储空间并重试“解决
  4. android应用的界面编程----View与ViewGroup的概念
  5. 矩阵运算——平移,旋转,缩放
  6. 4k视频分辨率的码流_8K电视来了!但是8K视频仍很遥远
  7. java手游 《剑心》_java
  8. GOOGLE 分布式系统关键技术论文分析
  9. 樱花树代码html,樱花树代码
  10. python 豆瓣评论分析方法_基于Python的豆瓣影评分析——数据预处理
  11. pdf合并页面大小不一样
  12. 【校内互侧】ZYF loves qaq (找规律+递推)
  13. 我是如何在一家独角兽公司做业务中台、数据中台的?8页ppt详解中台建设实践!...
  14. 怎么制定市场营销策划方案
  15. 课堂笔记_ 光线跟踪加速
  16. 为什么RGB 与 CMYK的差异,会有所不同?
  17. 计算机无法识别苹果手机,如何解决电脑无法识别iphone的问题?
  18. 推荐系统详解(三)近邻推荐
  19. 从 Godaddy 转移域名到 Namesilo
  20. design compiler基本操作

热门文章

  1. hsqldb mysql_hsqldb简单使用总结
  2. # RPGMaker MV 基础 1 : 项目目录认识
  3. 基于React实现的【绿色版电子书阅读器】,支持离线下载
  4. 小米手机浏览器部分图片显示异常
  5. 八种颠覆未来作战的前沿技术
  6. MySQL数据库应用与实践教程答案_MySQL数据库应用与实践教程(21世纪高等学校计算机教育实用规划教材)...
  7. SQL注入 时间延时注入语句
  8. 10K 3435热敏电阻阻值表
  9. 制作一个App的完整流程是哪些
  10. K歌、短视频技术最佳实践——“唱吧”音视频技术探索