mongodb关联数据的设计

  之前接触的都是MySQL这种关系型数据库的设计,很多数据库方面的思维已经被结构化查询语言束缚了。
  最近在写一个类似论坛的一个小项目,前端用的是React,后端用node.js和mongodb。在写获取发帖列表接口的时候,需求是获取一个帖子数组,每个数组成员就是一个帖子对象,帖子对象里包括文章标题、文章内容,同时还有发帖的作者。而作者我原本存的是一个id,取自user集合。原本的思路是在查询的时候再通过作者id去user集合中找到作者的姓名和头像,但在mongodb中,这需要在paper集合进行find操作后,再写一个for循环,有多少帖子就要去user集合查多少次id。这种操作方法,显然性能会非常差,想想都觉得恐怖。
  通过id去另外一个表里查详细数据,这是典型的MySQL查询的思路,我在网上查了很久,mongodb貌似天生就不支持这种关联查询,实现起来都要绕很大的弯子。
  最后,我想明白一个事情,作者的姓名和头像就应该直接存在paper集合中,在存单条帖子的时候,就直接存进去,这样取的时候只做一次find查询,那性能将是非常棒的。
  查询的性能提升了,但其他方面就要多花费一些。首先是数据出现了冗余,作者的姓名在user集合和paper集合中重复出现,并在paper集合中重复多次,mongodb实际上是在拿空间换时间。其次,数据维护更复杂,当要修改作者姓名时,要做得操作就非常多了,不过,在数据库的增删改查中,查的操作是最频繁的。改的操作并不是那么频繁,而且对性能的要求也并不高。
  综上所述,mongodb这种在一个集合中存储所有所需数据的方法是可取的,于是我决定直接在帖子集合中存作者信息,这样一来,很多问题就迎刃而解了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值