2015-07-05 126 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