我试图大规模地构建一个非重复的内容流。例如。当用户对“个人资料”或“非热门”评级时,该个人资料将永远不会再次出现给同一个用户。
在MySQL中我会考虑像NOT IN (..)
:
SELECT * FROM profiles WHERE id NOT IN (1,2,3,4,5,6,7) LIMIT 1
每次用户与个人资料互动时,都会将其标记为“已读”。因此,上述查询尝试获取尚未读取的配置文件。这不会缩放,因为NOT IN
将是无限的。
接下来我可以加入(我的SQL可能会关闭,但我希望它可以解决这个问题):
SELECT profiles.* FROM profiles, read WHERE read.user_id = 1 AND profile.id != read.profile_id LIMIT 1
我觉得这个解决方案也不理想,因为read
的{{1}}行的数量将永远存在。
这是我需要考虑使用Map Reduce的NoSQL吗?