首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不要向同一个用户显示同一文档两次。

不要向同一个用户显示同一文档两次。
EN

Stack Overflow用户
提问于 2016-03-03 19:56:36
回答 2查看 168关注 0票数 0

我有一个服务器存储内容5,000个文档。假设我有100万用户,他们都以自己的速度查询50个新文档,直到所有的内容都被看到为止。

我想确保每个用户只看到一次又一次与内容交互,就像Tinder一样。

我的第一个想法是给每个文档加上一个看过文档的用户ids列表。不过,这个名单会很长.就像一个包含100万个用户it的列表--每个文档--但这听起来确实会降低查询性能。

有没有人有更好的想法,我如何可以返回内容的用户,只是一次,从来没有。

我计划用mongoDB完成这个构建

p.p.s -我想做一个‘文档in查看’的列表,并将它附加到用户的文档中,然后使用用户所做的每一个查询,筛选出匹配‘document -in seen’的结果,但是这里的相同挑战是,随着用户不断交互并引入新的内容,查询长度将线性增长。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-04 14:18:31

解决办法取决于“以自己的速度”的确切含义。

您的第二篇文章建议,时间安排由用户决定,但她将得到由您的应用程序确定的顺序的文档,例如按新闻创建时间戳的顺序获取新闻项目。在这种情况下,时间戳或自动增量解决方案将起作用,而且对数据量和查询复杂性的影响很小。

但是,如果用户也可以选择查看哪些文档,这将不再有效,因为已经查看的文档可能分散在整个文档集中。有效处理这一问题的解决方案包括两种设计思想:

(a)想象大多数用户在某一特定时间点上是看了整个文件集的一小部分还是一大部分。如果只有一小部分文档被期望对特定用户感兴趣,那么用户查看的文档数量将相当少。(例如,假设文档是关于IT的,一个用户只想查看MongoDB文档,另一个用户主要是在Linux。)如果所有用户都对大多数或全部文档感兴趣,则特定用户未查看的文档数量将很小。(例如,一组人人都想听的新闻。)根据具体情况,只向每个用户存储一小部分已查看/未查看的文档is,这也将简化对有待查看的文档的查询。

(b)对于每个用户,不要存储单个文档ids的列表(查看或不查看),而是存储这些ids的间隔列表。例如,如果您存储尚未查看的文档is,并且将一些文档添加到数据库中,那么,当用户打开时,她的最高间隔将从(someLowerId, formerHighestId)更新到(someLowerId, currentHighestId)。当用户查看文档时,包含其id的间隔将从(lowId, highId)拆分为(lowId, viewedId - 1), (viewedId + 1, highId),其中一个或两个间隔可能为空。包括或排除这样的间隔也将简化查询,而不是列出单个ids。

票数 2
EN

Stack Overflow用户

发布于 2016-03-03 21:28:41

我的想法是,如果我在每个文档上加盖时间戳,因此只能在特定的时间戳'X‘之后查询更多的文档,我就可以完全避免内容与用户交互的多到多的关系。

“X”可以存储在我的“用户”表中。

因此,在打开应用程序时,我会同步我的“用户”表,然后在时间戳“X”之后发出查询,然后当返回结果时,我会用新的时间戳X再次更新“用户”表。

或者“x”不能是时间戳,“x”可能只是一个自动递增的id。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35781787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档