Database 跟踪网页内容在页面中的浏览次数?

Database 跟踪网页内容在页面中的浏览次数?,database,web-services,rest,relational-database,Database,Web Services,Rest,Relational Database,我阅读了更多关于Quora的答案排名算法的信息,发现了以下我正在尝试反向工程的功能: “在新的答案排名中,我们不仅仅关注上升票和下降票的绝对数量;我们也在考虑答复所受到的关注程度。例如:如果20人看到一个答案,并且全部20人都投赞成票,这可能比数千人看到一个答案,但只有100人投赞成票的信号更强。” Quora的小背景:它在布局上非常类似于堆栈交换。有人发布问题,有人回复答案,网站在一个页面中排列/显示所有答案 考虑到所有答案都汇集在一个页面中,Quora如何记录每个答案获得的浏览量 潜在假设

我阅读了更多关于Quora的答案排名算法的信息,发现了以下我正在尝试反向工程的功能:

“在新的答案排名中,我们不仅仅关注上升票和下降票的绝对数量;我们也在考虑答复所受到的关注程度。例如:如果20人看到一个答案,并且全部20人都投赞成票,这可能比数千人看到一个答案,但只有100人投赞成票的信号更强。”

Quora的小背景:它在布局上非常类似于堆栈交换。有人发布问题,有人回复答案,网站在一个页面中排列/显示所有答案

考虑到所有答案都汇集在一个页面中,Quora如何记录每个答案获得的浏览量

潜在假设:

  • 每个答案都存储在一个数据库中,以及 已提取多少次的计数器
  • 当用户第一次访问页面时,只有前几个答案是正确的 从数据库获取并显示在页面上。当用户滚动时 向下,通过附加GET动态获取更多答案 请求
  • 每次从数据库中获取答案时,数据库 计数器递增,从而跟踪答案的次数 已经被观众看到了
  • 对这种方法的关注:

  • 现在,每个GET请求都需要数据库更新,这将 显著恶化数据库工作负载
  • 而不是在用户加载 该网站每次只能获取1-2个答案 用户将滚动到页面底部。这将恶化 延迟和用户体验,这是用户必须保持的 正在等待显示其他内容

  • 这些问题是随着规模的扩大而扩大的吗?还是可以加以管理?

    下面是一些关于如何做到这一点的推测

    存储视图统计信息

    是的,Quora确实需要存储每个答案的视图,这是应用程序开发人员经常做的事。但是,你暗示他们将其存储在与答案相同的位置,而在实践中,他们可能会将其单独存储在一种更适合快速写入而不太适合可靠性的介质中(如果您由于服务器停机而错过了一些视图,这没关系;如果您不保存用户的答案,那就不太好了)。例如,它可以存储在Redis中,Redis将统计数据保存在内存中,默认情况下每分钟只向磁盘写入一次。或者他们可以将它们存储在memcached中,并编写自己的定期进程将结果转储到主数据库

    统计浏览量


    不太可能像您描述的那样计算视图数,即请求数据的次数,因为一个好的分布式体系结构应该在浏览器中缓存此类内容,并在途中的中间点缓存此类内容。更可能的是,他们通过在滚动事件时检查som,直接在浏览器和应用程序中跟踪视图e元素已可见。然后他们可以定期上传已查看项目的批量列表。

    感谢您的猜测。您是否有任何关于如何通过在滚动事件中检查某个元素是否可见来实现”的参考资料链接。“我天真的REST理解是,您在GET请求时向客户端发送数据,除非他们向您发送另一个GET/PUT/POST请求,否则您将不知道数据是如何使用的。REST接口如何收集有关滚动事件的信息以及是否“某些元素已变得可见”?任何实时滚动库/教程都会显示如何识别用户何时到达某个元素。一旦客户端脚本知道了这一点,它就可以将其发布到“视图”API。在没有持久连接的情况下(例如websocket),它更有可能成批发布,而不是每个单独的视图。这方面的实际服务类似于/views资源,因此客户端将发布到/views。请求可能包括有关用户、客户端平台和查看上下文(如包含的网页URL)的一些详细信息。