mongoose里面的population 与 mongodb aggregate的$lookup相比,谁的性能更好?
想问的三个问题
1.mongoose population的实现逻辑是什么?是封装了很多find,然后使用
DBRefs
模式进行查询的吗?
2.mongodb aggregate 是不是只查询IO了数据库一次?它的$lookup
方法比起传统的DBRefs
,在做多表关联查询时,是好还是快?为什么?
3.有没有什么办法可以监控程序对于mongodb的读写情况,测试出快慢。
备注: 个人认为mongoDB的aggregate $lookup
写起来太麻烦了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
$lookup
而
DBRef
只能根据ObjectId
,并且有固定的格式要求,所以我倾向于认为它是构造了查询,在得到数据对象的时候再根据引用条件查询一次得到引用的对象。这样就造成一个不可避免的问题,如果一次查询返回结果集有10条记录,那么除了这些记录外还要进行10次额外的查询来获取引用它们的对象。性能上面肯定是大打折扣的。$lookup
的性能比DBRef
好,它只进行一次查询来获取所有结果。但是这个运算符目前只能在复制集中使用,分片集暂不支持。总结一下,无论是
$lookup
还是DBRef
,都是建议尽量避免的。我在这个问题里解释了正确的处理方式及原因,请参考。