摘要: MongoDB数据建模小案例:朋友圈评论内容管理

需求

社交类的APP需求,一般都会引入“朋友圈”功能,这个产品特性有一个非常重要的功能就是评论体系。
先整理下需求:

  • 这个APP希望点赞和评论信息都要包含头像信息:

    1. 点赞列表,点赞用户的昵称,头像;
    2. 评论列表,评论用户的昵称,头像;
  • 数据查询则相对简单:

    1. 根据分享ID,批量的查询出10条分享里的所有评论内容;

建模

不好的

跟据上面的内容,先来一个非常非常"朴素"的设计:

{"_id": 41,"username": "小白","uid": "100000","headurl": "http://xxx.yyy.cnd.com/123456ABCDE","praise_list": ["100010","100011","100012"],"praise_ref_obj": {"100010": {"username": "小一","headurl": "http://xxx.yyy.cnd.com/8087041AAA","uid": "100010"},"100011": {"username": "mayun","headurl": "http://xxx.yyy.cnd.com/8087041AAB","uid": "100011"},"100012": {"username": "penglei","headurl": "http://xxx.yyy.cnd.com/809999041AAA","uid": "100012"}},"comment_list": ["100013","100014"],"comment_ref_obj": {"100013": {"username": "小二","headurl": "http://xxx.yyy.cnd.com/80232041AAA","uid": "100013","msg": "good"},"100014": {"username": "小三","headurl": "http://xxx.yyy.cnd.com/11117041AAB","uid": "100014","msg": "bad"}}
}

可以看到,comment_ref_objpraise_ref_obj两个字段,有非常重的关系型数据库痕迹,猜测,这个系统之前应该是放在了普通的关系型数据库上,或者设计者被关系型数据库的影响较深。而在MongoDB这种文档型数据库里,实际上是没有必要这样去设计,这种建模只造成了多于的数据冗余。

另外一个问题是,url占用了非常多的信息空间,这点在压测的时候会有体现,带宽会过早的成为瓶颈。同样username信息也是如此,此类信息相对来说是全局稳定的,基本不会做变化。并且这类信息跟随评论一起在整个APP中流转,也无法结局”用户名修改“的需求。

根据这几个问题,重新做了优化的设计建议。

推荐的设计

{"_id": 41,"uid": "100000","praise_uid_list": ["100010","100011","100012"],"comment_msg_list": [{"100013": "good"},{"100014": "bad"}]
}

对比可以看到,整个结构要小了几个数量级,并且可以发现url,usrname信息都全部不见了。那这样的需求应该如何去实现呢?

从业务抽象上来说,url,username这类信息实际上是非常稳定的,不会发生特别大的频繁变化。并且这两类信息实际上都应该是跟uid绑定的,每个uid含有指定的url,username。是最简单的key,value模型。所以,这类信息非常适合做一层缓存加速读取查询。

进一步的,每个人的好友基本上是有限的,头像,用户名等信息,甚至可以在APP层面进行缓存,也不会消耗移动端过多容量。但是反过来看,每次都到后段去读取,不但浪费了移动端的流量带宽,也加剧了电量消耗。

总结

MongoDB的文档模型固然强大,但绝对不是等同于关系型数据库的粗暴聚合,而是要考虑需求和业务,合理的设计。有些人在设计时,也会被文档模型误导,三七二十一一股脑的把信息塞到一个文档中。反而最后会带来各种使用问题。

原文地址:https://yq.aliyun.com/articles/66120?spm=5176.100239.blogcont73664.26.h8eZaz

MongoDB数据建模小案例:朋友圈评论内容管理相关推荐

  1. 小程序 朋友圈,点赞 ,评论,发布动态,功能,局部刷新数据之 -----评论

    小程序 朋友圈功能之 ----->评论 后台返回的数据 {code:0, data:{{"id": "174", // 动态的id"conten ...

  2. 小程序 朋友圈,点赞 ,评论,发布动态,功能,上传图片 -----发布动态

    小程序 朋友圈,点赞 ,评论,发布动态,功能,上传图片 -----发布动态 分析需要实现的功能 一.点击弹出输入内容的弹出框: 1.弹出输入框 2.隐藏那个底部导航条 二.上传图片 1.图片要在选择后 ...

  3. android评论嵌套,android 嵌套的listview示例(可参照实现朋友圈评论)

    android 嵌套的listview示例(可参考实现朋友圈评论) 最近在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题.其实,主要解决里面那一层的listview的 ...

  4. android 仿微信朋友圈 评论,2020年android 仿微信朋友圈 评论

    2020年android 仿微信朋友圈 评论 1.如果有人问我:那些艰难的岁月你是怎么熬过来的?我想我只有一句话回答:我有一种强大的精神力量支撑着我,这种力量名字叫"想死又不敢" ...

  5. MongoDB数据建模介绍

    MongoDB数据建模介绍 数据建模需要在满足应用需求.数据库引擎的性能特征.以及数据检索模式之间取得平衡.在设计数据模型时,请始终考虑应用程序对数据的使用场景(比如,查询,更新,和数据处理)以及数据 ...

  6. 朋友圈加粗字体数字_微信更新!朋友圈评论能发表情包,结果变成沙雕狂欢

    莫非...在安卓测试版的黑暗模式上线后,iOS 终于跟上了?! ​ 想多啦..机哥马上尝鲜,并没有发现 iOS 微信更新了黑暗模式. ​ 朋友圈评论, 终于支持发表情包啦! 以前,在朋友圈评论,只能发 ...

  7. 借助云开发实现小程序朋友圈的发布与展示

    随着小程序云开发越来越成熟,现在用云开发可以做的事情也越来越多,今天就来带大家实现小程序朋友圈功能. 知识技能点 1,小程序云开发 2,小程序云存储 3,小程序云数据库 4,图片大图预览 5,图片选择 ...

  8. 微信发朋友圈/评论/点赞/搜索/购物车测试点

    微信发朋友圈 功能测试 1.只发送文本(长按相机图标进入) 2.只发送图片(点击相机图标) 3.只发送视频(点击相机图标) 4.发送文本+图片 输入满足要求的文本,图片进行验证 5.发送文本+视频 输 ...

  9. 一文带你看懂小程序朋友圈广告是什么

    说起朋友圈广告,相信大家都在自己的朋友圈里见过,小程序也可以做朋友圈广告吗?当然可以,而且非常适合.今天,小木来为大家介绍下小程序朋友圈广告是什么. 1.小程序朋友圈广告功能是什么 小程序朋友圈广告是 ...

最新文章

  1. 如何对DevOps数据库进行源代码控制
  2. Python GuidLine(python编程规范) PEP8
  3. :架构优化在何时,方成为公司的推动力与核心竞争力
  4. CSS属性display:inline-block使用揭秘
  5. CentOs7下lnmp环境安装
  6. shell 多行注释
  7. 删除文件部分内容 php,php实现遍历目录并删除指定文件中指定内容_php技巧
  8. 移植busybox构建最小根文件系统
  9. 计算机专业务必学好的基本课程
  10. Oracle管理存储架构(二)--Oracle管理数据块空间
  11. QT入门(六)——代码创建计算器界面|可以计算的简易计算器|按键的关联
  12. Linux命令学习手册-iconv命令
  13. 大数据平台监控告警系统的实现
  14. 第4套人民币收藏潜力显现 50元券半年涨近2倍
  15. 大龄程序员的4年生涯
  16. 看我横向打你内网--PthPtk
  17. mysql非结构化查询_Mysql(2.3) 简单查询(SELECT)、子查询
  18. Verilog运算符优先级
  19. 本科科研经历(技术干货篇-论文发表流程)
  20. python调用linux命令的方法

热门文章

  1. linux下好用的文件批量重命名软件
  2. linux查看nfs使用量,Nfsiostat结合使用IOzone
  3. 邀请函:大势智慧邀您共聚2022中国地理信息产业大会
  4. oracle sql长度限制吗_设置sql数据库的最大长度限制吗
  5. Generic Netlink内核实现分析(一):初始化
  6. 视频教程-微信公众平台开发实战PHP版-微信开发
  7. H3C S12500X-AF系列交换机产品及维护介绍--优化
  8. [CSDN_Markdown] 使用CSDN Markdown编辑器
  9. 蔻驰和mk哪个更大牌_mk和蔻驰是一个档次吗?
  10. 教你如何在短期内取得考博英语的高分成绩