在社交networking中的“喜欢”数据库devise(MongoDB)

我正在使用MongoDB构build一个照片/video共享社交networking。 社交networking有一个Feed,个人资料和一个追随者模型。 我基本上采用了类似的方法来为我的“社交饲料”devise这篇文章 。 具体来说,当用户发布故事时,我使用了采用桶式方法的扇出。

我的问题是当用户“喜欢”一个故事。 我目前也在使用写扇出的方式,基本上增加/减less每个用户的feed的故事“喜欢计数”。 我认为这可能是一个糟糕的devise,因为用户“喜欢”比他们发布更频繁。 用户可以通过喜欢和不喜欢stream行的post来快速饱和服务器。

你们在这里推荐什么devise模式? 我应该使用扇形阅读吗? 继续与后台工作人员一起使用扇出? 如果解决scheme是“后台工作人员”,您推荐使用什么方法为后台工作人员? 使用Node.js

任何帮助表示赞赏!

谢谢,亨利

我认为最好的方法是:1.增加 – 减less数据库中的计数器以跟踪类似的数量2.插入一个名为“like”的集合,每个类似一个文档,跟踪用户的id谁喜欢故事和喜欢的故事的ID。

那么如果你只是需要喜欢的数量,你可以访问计数器的数据,它真的很快,而如果你需要知道哪里喜欢从哪里将查询集合称为“喜欢”通过故事编号查询并获取所有用户的ID谁喜欢这个故事。

我正在讨论的文件就像这样:

{_id: 'dfggsdjtsdgrhtd' 'story_id': 'ertyerdtyfret', 'user_id': 'sdrtyurertyuwert'} 

您可以将该计数器存储在故事文档本身中:

 { ... likes: 56 } 

您还可以跟踪故事文档中的最后一个喜欢(例如1000.最后,因为mongodb的文档的大小限制为16 MB,并且如果您的应用程序缩放得太多,则会在将单个文档中的潜在无限数据存储时遇到问题)。 有了这个方法,你可以很容易地查询“喜欢”的集合,并得到最后的喜欢。

当某人不喜欢某个故事时,您可以简单地从“喜欢”集合中删除类似的文档,或者,作为更好的方法(例如:当某人喜欢某个故事时发送通知),只保存在未曾喜欢的文档中,它会再次被同一用户喜欢,你会检查,已经插入,你不会发送另一个通知。

例如:第一次插入:

 {_id: 'dfggsdjtsdgrhtd' 'story_id': 'ertyerdtyfret', 'user_id': 'sdrtyurertyuwert' active: true} 

当unliked更新到这个

 {_id: 'dfggsdjtsdgrhtd' 'story_id': 'ertyerdtyfret', 'user_id': 'sdrtyurertyuwert' active: false} 

当每一个像添加检查是否有一个现有的文档具有相同的故事ID和相同的用户ID。 如果有,如果主动是假的,这意味着用户已经喜欢和不喜欢的故事,如果它会再次被喜欢,你不会发送已经发送的通知!