可扩展性:处理 Apostrophe 上的大量评论的最佳方式是什么?

Scalability: what is the best way to handle a lot of comments on Apostrophe?

我正在从事一个数据库有望增长的项目,但我正在犹豫如何设计评论系统。我正在使用总估算来计划,如果能达到目标的 10% 就太棒了,但如果事情开始增长,我想做好准备。

我想在自定义片段中的小部件上实现用户评论。每件会有大约数百个这样的小部件,每个小部件可能会有数百条评论,并且会有数千条。非管理员用户将无法编辑作品或小部件,只能编辑评论。

我认为的备选方案是:

  1. 作为小部件的评论,在主要内容中:如果不需要执行自定义查询来加载页面上的评论会非常好,但这可能会非常好又慢又重,编辑这篇文章是不可能的,至少用 chrome 是不可能的(想象一下编辑器模式加载 500 个小部件,每个小部件有 200 条评论......一次加载 100,000 条评论!),并且很难搜索评论在所有作品和小部件中。
  2. 评论作为一个片段,使用 _id 字段关联到主片段:更好,因为可以通过过滤器一个一个地审核评论,并加载它们当用户单击小部件时,使用 ajax、分页等。但是,它不会挤满 aposDocs 集合并影响其他部分吗? 例如,10,000 个主要部分和 100,000 个评论部分 = 10 亿个评论部分。如果每条评论有 5kB,总大小将约为 4,66TB,这对于 mongo 是可以的,但是 对于 Apostrophe 可以吗? 我可以去吗?
  3. 另一个集合中的评论:会更有条理,不会影响其他部分,但我会失去使用撇号本机管理评论的能力,富文本评论......这是非常可悲的。 是否有一种简单的方法来创建一个将评论存储在另一个集合(例如 commentsDoc)中并保持撇号功能的作品?

哪个最好?还有其他方法吗?还有其他重要的事情需要考虑吗?

我知道您的计划很乐观,这就是我悲观地回应的原因。 (: 也就是说,我相信你所说的数字和你将体验到的结果。

首先,您是对的,MongoDB 文档(16MB 限制)放不下 100,000 条评论,而且性能会很糟糕。

其次,虽然在每个小部件中使用连接来获取评论在理论上是可行的,但实际上您仍然会在典型的网页浏览中加载 100,000 条评论,这会耗尽服务器端和浏览器端的资源。你也会遇到SEO问题。

因此,您需要换个角度考虑这个问题。如果您在一个 "document," 中有数百个小部件,那它就不是真正的单个文档。也就是说,用户不会有那样的体验。我没有太多关于您的用例的信息,但我的猜测是每个 "document" 实际上更像是一个知识库,并不是每个网页浏览都涉及阅读所有数百个小部件。

所以,把这些文件分开。当前设计中的每个 "widget" 都应该是独立的一部分。它应该有一个永久链接——一个 URL 用户可以在其中共享它并且 Google 可以对其进行索引。这就是您使用 apostrophe-pieces-pages 得到的结果。

但是,如果您想在没有传统分页的 "one-pager" 设计中展示它们,您可以使用 apostrophe-pieces-pages 的无限滚动功能以良好的性能实现这一点。如果以及当用户参与那么长时间并且滚动(几乎)那么远时,这会在后台自动加载更多内容。有关该主题的更多信息,请参阅 reusable content with pieces

并且,您可以使用 piecesFilters 选项添加过滤,以允许在单独的 "meta-documents" 之间导航(您当前认为是单个部分)。

此外,考虑使用 Disqus 发表评论。它是免费的,您不必自己实施节制等。这将极大地简化您的实施,除非有令人信服的理由自行托管评论并担心用户注册等问题。

我认为这是在没有更好地理解您的用例的情况下尽可能具体的。