具有 mongodb schema/endpoint 设计的 Facebook "like" 功能
Facebook "like" feature with mongodb schema/endpoint design
我提出了多种解决方案,但其中 none 似乎是“面向未来的证明”。
让我先重复我的解决方案。
特征的验收标准
- 用户可以喜欢或不喜欢 post
- 用户可以在他已经喜欢的 post 上看到“满满的心”
假设
有用户 collection 和 Post collection
可能的解决方案
1.放入喜欢 post.
的用户引用数组
问题
超级简单,但是一旦“post”增长太多,所有查询post的用户都会受到影响。还将潜在的无限数组放入文档中。
2。将 Post 个引用数组放入 User
问题
同上,但只有数据不断增长的用户可能会受到影响。
3。喜欢参考 User 和 Post 的架构,并向 Post
添加计数器
问题
这个文档会增长的很快,很多用户每天都会点很多post。如何查询用户喜欢的post?如果这个 collection 增长到数百万个类似文档怎么办?
到目前为止我还没有找到正确的答案,起初,我认为#1 是可行的,然后很快改变了主意到#3,然后我想 - 如果它长得很快并且变得很痛怎么办每次获取 posts 时查询以从数百万文档中找到“喜欢”?现在我认为#2 是“更安全”的选择,但我可能错了。如果我去 #3,我想分开 /likes and/posts 端点,所以这是另一个问题。 - 我将如何查询用户是否喜欢 post 的列表?它应该是单独的单一端点吗?但是每次加载 post 的列表时都会调用太多。我很困惑:(
感谢阅读。
3 号门!然后,您将使用 User+Post 的唯一复合索引来防止重复并加快查询时间。
当您查询 posts 时,您将要使用聚合管道,这样您就可以 $lookup 查看每个 post.[=12 的 'like' 文档是否存在=]
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
https://docs.mongodb.com/manual/core/index-compound/index.html
应该可以帮助您入门。
我提出了多种解决方案,但其中 none 似乎是“面向未来的证明”。
让我先重复我的解决方案。
特征的验收标准
- 用户可以喜欢或不喜欢 post
- 用户可以在他已经喜欢的 post 上看到“满满的心”
假设
有用户 collection 和 Post collection
可能的解决方案
1.放入喜欢 post.
的用户引用数组问题
超级简单,但是一旦“post”增长太多,所有查询post的用户都会受到影响。还将潜在的无限数组放入文档中。
2。将 Post 个引用数组放入 User
问题
同上,但只有数据不断增长的用户可能会受到影响。
3。喜欢参考 User 和 Post 的架构,并向 Post
添加计数器问题
这个文档会增长的很快,很多用户每天都会点很多post。如何查询用户喜欢的post?如果这个 collection 增长到数百万个类似文档怎么办?
到目前为止我还没有找到正确的答案,起初,我认为#1 是可行的,然后很快改变了主意到#3,然后我想 - 如果它长得很快并且变得很痛怎么办每次获取 posts 时查询以从数百万文档中找到“喜欢”?现在我认为#2 是“更安全”的选择,但我可能错了。如果我去 #3,我想分开 /likes and/posts 端点,所以这是另一个问题。 - 我将如何查询用户是否喜欢 post 的列表?它应该是单独的单一端点吗?但是每次加载 post 的列表时都会调用太多。我很困惑:(
感谢阅读。
3 号门!然后,您将使用 User+Post 的唯一复合索引来防止重复并加快查询时间。
当您查询 posts 时,您将要使用聚合管道,这样您就可以 $lookup 查看每个 post.[=12 的 'like' 文档是否存在=]
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/
https://docs.mongodb.com/manual/core/index-compound/index.html
应该可以帮助您入门。