跟踪网页内容在一个页面中被浏览的次数?
Tracking number of times web content has been viewed within a page?
我阅读了有关 Quora 的答案排名算法的更多信息,并发现了我试图对其进行逆向工程的以下功能:
http://blog.quora.com/Improved-Answer-Ranking-Follow-Up
"with new answer ranking, we are not focusing solely on the absolute number of upvotes and downvotes; we are also considering the level of attention that an answer has received. For example: if 20 people see an answer, and all 20 of them upvote it, that may be a stronger quality signal than if thousands of people see an answer but only 100 upvote it."
Quora 的小背景:它在布局上与 Stack Exchange 非常相似。有人发布问题,人们回复并给出答案,网站 ranks/displays 所有答案都在一个页面中。
鉴于所有答案都被编译到一个页面中,Quora 将如何跟踪每个单独答案获得的浏览量?
潜在假设:
- 每个单独的答案都存储在数据库中,连同
它被提取了多少次的计数器。
- 当用户第一次访问页面时,只有前几个答案
从数据库中获取并显示在页面上。随着用户滚动
向下,通过额外的 GET 动态获取更多答案
要求。
- 每次从数据库中获取一个答案,数据库
计数器递增,从而跟踪答案的次数
已经被观众看到了。
对这种方法的担忧:
- 现在每个 GET 请求都需要更新数据库,这将
数据库工作量显着恶化。
- 而不是在用户加载后立即批量获取 10-20 个答案
页面,该网站每次都必须获取 1-2 个答案
用户滚动到页面底部。这会恶化
延迟和用户体验,因为用户必须保持
等待更多内容出现。
这些真正的担忧会随着规模的扩大而膨胀吗?还是可以对其进行管理?
这里是关于它是如何完成的一些猜测。
存储视图统计信息
是的,Quora 确实需要存储每个答案的浏览量,应用程序开发人员通常大规模地这样做。但是,您暗示他们将其存储在与答案相同的位置,而实际上,他们可能会将其单独存储在一种介质中,该介质针对快速写入进行了更优化,而可靠性则更少(如果您错过了一些视图,则可以)到服务器中断;如果您不保存用户的答案,那就不太好了)。例如,它可以存储在 Redis 中,它将统计信息保存在内存中,默认情况下每分钟只写入一次磁盘。或者他们可以将它们存储在 memcached 中并编写自己的周期性进程以将结果转储到主数据库。
计数观看次数
不太可能像您描述的那样计算观看次数,即请求数据的次数,因为良好的分布式架构应该在浏览器中以及沿途的中间点缓存此类内容。他们更有可能直接在浏览器和应用程序中跟踪视图,方法是在滚动事件发生时检查某些元素是否可见。然后他们可以定期上传大量已查看项目的列表。
我阅读了有关 Quora 的答案排名算法的更多信息,并发现了我试图对其进行逆向工程的以下功能:
http://blog.quora.com/Improved-Answer-Ranking-Follow-Up
"with new answer ranking, we are not focusing solely on the absolute number of upvotes and downvotes; we are also considering the level of attention that an answer has received. For example: if 20 people see an answer, and all 20 of them upvote it, that may be a stronger quality signal than if thousands of people see an answer but only 100 upvote it."
Quora 的小背景:它在布局上与 Stack Exchange 非常相似。有人发布问题,人们回复并给出答案,网站 ranks/displays 所有答案都在一个页面中。
鉴于所有答案都被编译到一个页面中,Quora 将如何跟踪每个单独答案获得的浏览量?
潜在假设:
- 每个单独的答案都存储在数据库中,连同 它被提取了多少次的计数器。
- 当用户第一次访问页面时,只有前几个答案 从数据库中获取并显示在页面上。随着用户滚动 向下,通过额外的 GET 动态获取更多答案 要求。
- 每次从数据库中获取一个答案,数据库 计数器递增,从而跟踪答案的次数 已经被观众看到了。
对这种方法的担忧:
- 现在每个 GET 请求都需要更新数据库,这将 数据库工作量显着恶化。
- 而不是在用户加载后立即批量获取 10-20 个答案 页面,该网站每次都必须获取 1-2 个答案 用户滚动到页面底部。这会恶化 延迟和用户体验,因为用户必须保持 等待更多内容出现。
这些真正的担忧会随着规模的扩大而膨胀吗?还是可以对其进行管理?
这里是关于它是如何完成的一些猜测。
存储视图统计信息
是的,Quora 确实需要存储每个答案的浏览量,应用程序开发人员通常大规模地这样做。但是,您暗示他们将其存储在与答案相同的位置,而实际上,他们可能会将其单独存储在一种介质中,该介质针对快速写入进行了更优化,而可靠性则更少(如果您错过了一些视图,则可以)到服务器中断;如果您不保存用户的答案,那就不太好了)。例如,它可以存储在 Redis 中,它将统计信息保存在内存中,默认情况下每分钟只写入一次磁盘。或者他们可以将它们存储在 memcached 中并编写自己的周期性进程以将结果转储到主数据库。
计数观看次数
不太可能像您描述的那样计算观看次数,即请求数据的次数,因为良好的分布式架构应该在浏览器中以及沿途的中间点缓存此类内容。他们更有可能直接在浏览器和应用程序中跟踪视图,方法是在滚动事件发生时检查某些元素是否可见。然后他们可以定期上传大量已查看项目的列表。