跟踪查看的内容
Tracking viewed content
假设我有类似 RSS reader 的内容,其中有大量可用项目,我只想显示我的用户尚未阅读的项目。
跟踪已读内容且不会导致超级脏查询的最佳方法是什么?我正在努力避免出现巨大的 $nin: [12312, 1341, 134234, ..]
情况。在使用了一年之后,您的 "read" 数组中将有数百万个项目,然后至少有数千个项目。
我能想到的另一个选择是为每个用户保留一个 collection,当有新项目出现时,将其添加到拥有该提要 collection 的每个用户。随着时间的推移,这似乎变得更干净了,但是如果我有很大的营业额并且说我的 30% 的用户停止使用该网站怎么办。他们的 collection 只会收集大量数据?我可以在一段时间后修剪这些 collections,但我也不确定这是否公平。如果他们去度假怎么办?
这两种解决方案对我来说都太恶心了,我是不是错过了更好的方法?
注意:我的问题已被标记,结果将写入 Mongo,但答案不需要特定于此。
一种可能是在项目文档中存储已阅读项目的用户的用户标识。然后可以搜索read
数组不包含用户ID的文章。
显然,如果您有很多用户,就会遇到文档增长问题。
对于按时间顺序排列的数据,似乎最有效的方法是只记录每个用户看到的最旧内容,并单独列出任何 "mark as unread" 不适合的项目。
我认为这实际上是一个很好的理由,可以按时间顺序对这样的事情进行排序,或者至少将其纳入您的算法,以便您可以计算相关内容的最大年龄,以确保您的查询可行。
如果它确实是非时间顺序数据,那么您必须为每个用户保留一个项目集合。
假设我有类似 RSS reader 的内容,其中有大量可用项目,我只想显示我的用户尚未阅读的项目。
跟踪已读内容且不会导致超级脏查询的最佳方法是什么?我正在努力避免出现巨大的 $nin: [12312, 1341, 134234, ..]
情况。在使用了一年之后,您的 "read" 数组中将有数百万个项目,然后至少有数千个项目。
我能想到的另一个选择是为每个用户保留一个 collection,当有新项目出现时,将其添加到拥有该提要 collection 的每个用户。随着时间的推移,这似乎变得更干净了,但是如果我有很大的营业额并且说我的 30% 的用户停止使用该网站怎么办。他们的 collection 只会收集大量数据?我可以在一段时间后修剪这些 collections,但我也不确定这是否公平。如果他们去度假怎么办?
这两种解决方案对我来说都太恶心了,我是不是错过了更好的方法?
注意:我的问题已被标记,结果将写入 Mongo,但答案不需要特定于此。
一种可能是在项目文档中存储已阅读项目的用户的用户标识。然后可以搜索read
数组不包含用户ID的文章。
显然,如果您有很多用户,就会遇到文档增长问题。
对于按时间顺序排列的数据,似乎最有效的方法是只记录每个用户看到的最旧内容,并单独列出任何 "mark as unread" 不适合的项目。
我认为这实际上是一个很好的理由,可以按时间顺序对这样的事情进行排序,或者至少将其纳入您的算法,以便您可以计算相关内容的最大年龄,以确保您的查询可行。
如果它确实是非时间顺序数据,那么您必须为每个用户保留一个项目集合。