database - 跟踪网页内容在一个页面中被浏览的次数?

标签 database web-services rest relational-database

我正在阅读有关 Quora 的答案排名算法的更多信息,并遇到了以下我试图对其进行逆向工程的功能:

http://blog.quora.com/Improved-Answer-Ranking-Follow-Up

“对于新的答案排名,我们不仅仅关注赞成票和反对票的绝对数量;我们还会考虑一个答案所受到的关注程度。例如:如果有 20 人看到一个答案,并且所有 20 个人都对它投了赞成票,这可能是比成千上万的人看到一个答案但只有 100 人点赞的情况更强的质量信号。”

Quora 的小背景:它在布局上与 Stack Exchange 非常相似。有人发布问题,人们回复答案,网站在单个页面中对所有答案进行排名/显示。

鉴于所有答案都被编译到一个页面中,Quora 将如何跟踪每个答案获得的浏览量?

潜在假设:

  1. 每个单独的答案都存储在数据库中,连同 它被提取了多少次的计数器。
  2. 当用户第一次访问该页面时,只有前几个答案是 从数据库中获取并显示在页面上。随着用户滚动 向下,通过额外的 GET 动态获取更多答案 要求。
  3. 每次从数据库中获取答案时,数据库 计数器递增,从而跟踪答案的次数 已被观众看到。

对这种方法的担忧:

  1. 现在每个 GET 请求都需要更新数据库,这将 数据库工作量显着恶化。
  2. 而不是在用户加载后立即批量获取 10-20 个答案 页面,该网站每次都必须获取 1-2 个答案 用户滚动到页面底部。这会恶化 延迟和用户体验,因为用户必须保持 等待其他内容出现。

这些真正的担忧会随着规模的扩大而扩大吗?还是可以对其进行管理?

最佳答案

这里是关于它是如何完成的一些推测。

存储 View 统计信息

是的,Quora 确实需要存储每个答案的浏览量,应用程序开发人员通常大规模地这样做。但是,您暗示他们将其存储在与答案相同的位置,而实际上,他们可能会将其单独存储在一种介质中,该介质针对快速写入进行了更优化,而可靠性则更少(如果您错过了一些 View ,则可以)到服务器中断;如果您不保存用户的答案,那就不太好了)。例如,它可以存储在 Redis 中,它将统计信息保存在内存中,默认情况下每分钟只写入一次磁盘。或者他们可以将它们存储在 memcached 中并编写自己的周期性进程以将结果转储到主数据库。

计算观看次数

不太可能像您描述的那样计算 View ,即请求数据的次数,因为良好的分布式架构应该在浏览器中以及沿途的中间点缓存这种内容。他们更有可能直接在浏览器和应用程序中跟踪 View ,方法是在滚动事件发生时检查某些元素是否可见。然后,他们可以定期上传大量已查看项目的列表。

关于database - 跟踪网页内容在一个页面中被浏览的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31231764/

相关文章:

php - 使用 PDO 在 2 个不同的数据库中复制行

wcf - 如何在 WCF Web 服务中检测用户代理

php - 如果在另一行中指定,则MySQL选择行

mysql - 如何根据特定条件将数据从一张表拉取到另一张表?

android - 在网络服务调用期间显示 'please wait'

.net - 异步 Web 服务调用似乎已停止处理,但远程调试器显示为其他情况

未找到 RESTful 资源。 404还是204?当处理程序返回 null 时,Jersey 返回 204

java - 使用 Spring Security for REST API 进行基本身份验证中的用户权限

rest - SharePoint REST 在单个 REST 查询中获取用户标题

mysql - 为什么 Sequel Pro 在命令行中显示的表键值结果与 MySQL 不同?