【问题标题】:Approach to serving documents only once to each user仅向每个用户提供一次文档的方法
【发布时间】:2015-09-20 02:20:45
【问题描述】:

创建只向用户显示文档的应用程序的最佳方法是什么,例如 Tinder。

每个人(即文档)只提供给每个用户一次。在用户对其他人(在文档上)执行操作后,该文档不会再向同一用户显示。

构建这样一个系统的最佳方法是什么?

  • 存储已经看到的文档 ID 并将它们发送到搜索引擎以过滤掉它们。这种方法似乎很糟糕,因为您最终可能会将数千个 ID 发送到搜索引擎的过滤查询中
  • 将已对文档执行操作的用户的 ID 存储在文档内的字段中,并在搜索查询中发送用户 ID,请求将文档从所述字段中过滤掉。这种方法可以使文档的大小大幅增长,因为文档中可能存储了数千个 ID。
  • 为每个用户创建一个包含必要文档的索引,并在用户对其执行操作时从索引中删除这些文档。这里的缺点是很难维护和更新可能有数千个索引。
  • 将查看的文档存储在数据库的用户对象中,并查询文档。获得结果后,根据用户对象存储的内容,使控制器从用户已经看到的列表中跳过或删除文档。这里的缺点是您最终可能会检索到 20 个结果,并且所有 20 个结果都已被用户看到。

必须有更好的方法来构建这种类型的应用程序,这样可以更好地扩展。

有什么想法吗?

【问题讨论】:

    标签: search indexing full-text-search search-engine


    【解决方案1】:

    我想知道这与我即将构建一个 tinder-esque 应用程序完全相同的事情。我相信答案是您只需根据帐户创建日期按降序请求所有用户。如果您正在访问的数据库有分页,您将一次收到 100 个。然后,您就有了一个缓冲区,您可以在其中决定实际向应用程序的用户显示什么以及以什么顺序显示。显示后,您可以在本地将其删除。只要您跟踪从远程服务器获得的最后一个用户的日期,您就可以继续要求更多,而不必处理重复。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2010-11-01
    相关资源
    最近更新 更多