2010-08-22 50 views
9

我有一個應用程序,主實體爲Story,用戶可以爲每個故事投票。每個投票增加一個vote_count的故事。如何在使用分片計數器時使用計數器進行排序

我很擔心寫故事的爭用,所以我打算使用每個故事的sharded counter來跟蹤投票。

現在我的問題:我怎麼能得到按票數排序的故事列表?例如:顯示50個最高票數的故事。

我最初的想法是定期運行一個任務,讀取計數器值並更新實際故事的屬性。通過投票的查詢結果稍微過時就沒問題。

回答

2

這聽起來像你可能會做一些過早的優化。我會跳過分片櫃檯,直到你明顯需要它們。如果你確信你會的話,那麼一定要從他們開始。至於運行週期性任務和緩存結果的每個故事屬性,這可能是另一個不成熟的優化。

我沒有直接的經驗與谷歌應用程序引擎,所以希望有人會有一些信息分享。

+1

重新過早優化:我同意這可能是一個沒有顯示寫入爭用的新應用程序的矯枉過正,但考慮這是一個學習問題,並假設該應用程序將以每秒10次寫入計數器。 – cope360 2010-08-22 22:31:22

+0

這是一個有趣的問題。我以前從來沒有聽說過分片櫃檯,所以我期待着更多的迴應。 – 2010-08-22 22:55:29

+0

如果你想查看它們的工作方式,我添加了一個問題鏈接。 – cope360 2010-08-22 23:02:38

1

定期添加數據可能是一個很好的策略來對付計數器的分散分散。

您也可以嘗試其他策略沒有碎片計數,如已在別處描述:

http://blog.notdot.net/2010/04/High-concurrency-counters-without-sharding

(有你保持在內存緩存的計數器,並定期刷新累積值數據存儲)

您的應用輕微計數錯誤有多關鍵?