如何在活动流中发表评论? (如脸书)

Posted

技术标签:

【中文标题】如何在活动流中发表评论? (如脸书)【英文标题】:How to do comments in Activity Stream? (like Facebook) 【发布时间】:2010-05-03 10:00:13 【问题描述】:

我开始开发活动流。我读过How to implement the activity stream in a social network 和What’s the best manner of implementing a social activity stream?。我还没有找到将 cmets 添加到活动中的最佳方法。和 facebook 一样,每条评论都可以被其他人评论。

如果每个活动评论都保存为另一个活动,那么如果不进行查询,我将无法获得该评论的活动。所以我正在考虑的解决方案是将 cmets 保存在每个活动的序列化数据字段中。如果用户想删除他的评论,我必须更新该活动。

这是正确的解决方案吗?有更好的方法吗?

谢谢!

【问题讨论】:

好问题@fesja。你最后做了什么? 【参考方案1】:

我同意 Jakub 的观点 - 这取决于您的后端,但您所追求的是一种存储树的有效方法。如果您使用的是 SQL 数据库,我会同时存储父活动和树的根(主 ID?)。这样,您就可以快速获取整个 cmets 树,只要给出任何评论或活动 ID。

然后您的查找代码将如下所示:

要使用 cmets 重现整个活动流,请获取具有相同主 ID 的所有记录。您可能希望将主记录表示为具有空父 ID。 添加评论时,您需要更新两个字段 - 主 ID 和父 ID。您可以直接从父 Activity 中获取它们,而无需进行任何查找。 删除评论时,只需将其删除,它就会从树中消失。 如果您只想要“主”活动,则选择 where parent = null 即可。

举个例子,如果有帮助的话:

主活动(id=123,p=null,m=123) 评论(id=124,p=123,m=123) 另一条评论(id=125,p=123,m=123) 子评论(id=126, p=125, m=123)

我记得读过一个使用基于文档的存储和 Couch-DB 的示例。我现在找不到它,但从内存中它使用了类似的东西(父记录的主 ID)。

【讨论】:

感谢 anthony,这种方法的问题是,如果我想从用户(使用 cmets)那里获取最后的活动,我会通过 created_at 获取用户(活动和 cmets)的最后 30 条记录: - 但是这 30 个里面会有 cmets(所以不会有 30 个活动)。 - 或者可能有没有父活动的 cmets(因为它已被排除在这 30 个之外) 在您所说的情况下,您可能想要为每个活动抓取整个“树”(例如,您的 30 个活动中的一个是上面的 id=125,所以您抓取所有四)。您可以在一个查询中执行此操作,但它可能会变得非常大。您的另一个选择是按需抓取东西 - 例如。 AJAX '阅读更多...' 链接或类似的东西。你选择哪一个真的取决于你在做什么。对于 RSS 活动提要,选项 #2 可能是最好的,但对于(例如)首页个人资料页面,您更有可能需要请求所有内容。【参考方案2】:

这取决于您使用的是什么类型的后端以及您的限制是什么。

序列化 cmets 似乎是一种合理的方法,或者我想您可以简单地使用多态 cmets 表(如果您使用的是关系数据库)。

【讨论】:

以上是关于如何在活动流中发表评论? (如脸书)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Postman 中发表评论

您如何在 Liquid 中发表评论?

客户发表评论时如何订阅 facebook webhook 事件

如何在 HAML 中发表评论

如何在 Dockerfile 中发表评论?

对 jupyter notebook 的 pull request 发表评论