【问题标题】:Likes in mongoDB喜欢 mongoDB
【发布时间】:2014-02-08 14:27:50
【问题描述】:

这是我的问题:我想创建一个网络,允许用户上传帖子并喜欢他们。

我认为我可以将每个帖子存储在一个名为“帖子”的集合中,而且我这样做没有问题。

但是我可以在哪里存储每个帖子的点赞以及相关数据(时间、用户来源等)? 我无法在帖子文档中执行此操作,因为文档的最大大小为 16MB,并且想象我将不得不为每个帖子记录数千个带有相关数据的喜欢,我无法做到这一点。

我可以将每个帖子与一个集合相关联,其中包括文档,并且每个文档都是类似的。但老实说,如果可能的话,我宁愿不要创造数百万的收藏品。

邮寄文件示例:

{_id: blabla, userfrom: {}, txt: "i am the post", time: {}, geo: {}, likes: {here i have to add as many likes as users clicks, and it can exceed 16MB}}

现在在“喜欢”中,我可以引用一个集合,但这是我不想做的。

我在 mongodb 中阅读了有关 gridstore 的信息,但我没有明白这一点。我可以将它用作大小可以趋于无限的文档吗?这样我就可以添加任意数量的记录了吗?所以使用网格商店我可以做类似的事情:

{_id: blabla, userfrom: {}, txt: "i am the post", time: {}, geo: {}, likes: {infinite records}}

有人可以帮我处理吗?谢谢你

【问题讨论】:

  • 不确定您所说的“创建数以百万计的收藏”是什么意思。常见的方法是为每个赞创建一个包含一个文档的集合,其中包含对它所指的帖子的引用。为什么那行不通?
  • 为什么不将喜欢的内容存储为文档?每个人都会有他们喜欢的帖子的参考 ID?并且,在帖子中记录总数,这样代码实际上不需要每次都计算。我敢打赌,您不需要在每次显示帖子时都获取每个“喜欢”的详细信息,因此最好不要将所有数据存储在一个文档中。
  • 单一收藏。每个赞都需要一个名为 postId 之类的字段,可以在查询中使用它来获取给定帖子的所有赞。
  • 您也可以选择双重存储最近的点赞,在所有点赞的集合中,也可以在原始帖子文档中。例如,存储最后 50 个,以便每次都可以随帖子一起获取它们。
  • 索引适用于集合中的所有文档

标签: node.js mongodb bigdata database


【解决方案1】:

当你不想嵌入喜欢时,你必须走关系方式。

创建另一个“喜欢”集合,其中每个文档都有一个字段,说明它适用于哪个帖子。为避免必须计算点赞集合中的所有条目来获取帖子的点赞数,您还应该将当前计数存储在帖子文档中。

关于 GridFS:我认为这对您没有帮助。它不应该用于文档。其目的是在数据库中存储大型二进制文件。

【讨论】:

  • 如果我们将当前计数存储在发布文档中,那么每次用户喜欢或不喜欢该帖子时,我们都需要更新该计数。不要认为更新文档数百万次是最好的主意,因为 post 和 likes 表之间的数据不会保持一致。
  • @JyotmanSingh 在您的应用程序中会更频繁地发生什么:用户看到点赞数还是用户更改点赞数?更常见的情况是您应该优化的情况。而且我非常确定,这个数字的阅读频率会比写入的频率高得多。我也很确定,拥有数百万个赞的文档是例外而不是常态,大多数文档的赞数要少得多,但那些拥有数百万赞的仍然是那些大多数意见。但这是你的应用程序。
  • 是的,你提出了一个非常有效的观点。我不会进一步评论,因为我不知道更好的解决方案,但很高兴知道是否有更好的解决方案。这似乎是一个非常常见的问题(喜欢),但我还没有遇到一个非常好的实现。
猜你喜欢
  • 2014-02-09
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 2018-05-27
  • 2022-08-03
相关资源
最近更新 更多