2015-07-05 85 views
1

我正在读更多的Quora的答案排名算法,并遇到下列功能,我试图扭转工程师提出:跟踪网页内容在页面中浏览次数?

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

“有新的答案排名,我们不能仅仅着眼于绝对数量的upvotes和downvotes;我们也在考虑一个答案已经收到的关注程度,例如:如果20个人看到答案,并且所有20个人都赞成它,这可能是一个更强的质量信号比如果成千上万的人看到了一个答案,但只有100个人满意。“

Quora的小背景:它与布局中的Stack Exchange非常相似。有人发布了一个问题,人们回答了答案,并且该网站将所有答案排列/显示在一个页面中。

鉴于所有的答案都编译成一个页面,Quora会如何跟踪每个单个答案获得的视图数量?

潜在的假设:

  1. 每个人的答案被存储在数据库中,与它有多少次被取出一个 计数器在一起。
  2. 当用户第一次访问该页面时,只有前几个答案是 从数据库中获取并显示在页面上。当用户向下滚动 时,通过额外的GET 请求动态获取更多答案。
  3. 每次从数据库中提取答案时,数据库 计数器都会增加,从而跟踪查看者看到答案 的次数。

关注这种方法:

  1. 每一个GET请求,现在需要数据库的更新,这将 显著恶化数据库工作负载。
  2. 用户加载 页面后,用户不用一次性批量提取10-20个答案,而是每次输入012-即可获取1-2个答案,用户可滚动到页面底部。这会加重 延迟和用户体验,因为用户必须保持 等待显示其他内容。

这些真正的担忧是否会随着规模而爆发?或者他们可以被管理?

回答

2

下面是关于如何完成的一些猜测。

将View STATS

是,Quora的确实需要存储每个答案的看法,通常是由应用程序开发人员在做规模。但是,您意味着他们将它存储在与答案相同的位置,而实际上,它们可能会将其分别存储在更适合快速写入的介质中,而不是用于可靠性的介质(如果您错过了几次到服务器中断;如果你不保存用户的答案,那么就不太好)。例如,它可以存储在Redis中,这会将统计信息保存在内存中,并且默认情况下只会每分钟写入一次磁盘。或者他们可以将它们存储在memcached中,并编写自己的定期流程以将结果转储到主数据库。

计数VIEWS

这是因为你的描述不太意见将被计算,即数据是多少次的要求,因为一个良好的分布式架构应该缓存之类的内容在浏览器中,并在中间点一路上。通过在滚动事件中检查某些元素是否可见,他们更有可能直接在浏览器和应用程序中跟踪视图。然后,他们可以定期上传所查看项目的批量清单。

+0

感谢您的教育猜测。你有没有链接到资源如何实现**“通过检查滚动事件,如果某些元素已经变得可见。”** 我的幼稚REST的理解是你发送数据到客户端的GET请求,除非他们向您发送另一个GET/PUT/POST请求,否则您将不知道数据如何消耗。 REST接口如何收集有关**滚动事件的信息**以及**“某些元素已变得可见”**? – RvPr

+0

那么,任何现场滚动库/教程将展示如何识别用户何时到达某个元素。一旦客户端脚本知道,它可以发布到一个“查看”API。在没有持续连接的情况下(例如websocket),它将更有可能分批发布,而不是每个单独的视图。实际的服务就像a/views资源,所以客户端发送到/ views。该请求可能会包含一些关于用户,客户端平台和查看上下文的详细信息,例如包含网页网址。 – mahemoff