2015-05-23 135 views
0

我正在尋找一種簡單的方法來存儲和檢索計數,無論用戶何時多次查看獨特的帖子/頁面。事後/ 1次/ 2。我也對一篇文章的總觀看次數感興趣。具有歷史記錄的唯一視圖計數

我怎麼想,我應該實現這一點:

  1. 創建的列userpostview表(用戶ID,帖子ID,dateCreated會)
  2. 創建userpostview的行與用戶ID每一次,帖子ID,如果記錄不存在
  3. 檢索行的總計數其中userid == X
  4. 檢索行,其中==帖子ID的總數ý

對於有幾行的小規模應用程序沒問題。但我預計不同用戶每天閱讀不同帖子的比例很高。因此,userpostview表將比用戶表或郵政表的要大得多。從長遠來看,我認爲這將是一個性能問題,對嗎?例如,連續調用計數可能會減慢讀取速度。我想知道在這種情況下緩存計數是否理想。還是應該有一個單獨的表來保存增量計數器?

我正在使用一個sqlalchemy後端的瓶子到postgresql。這足夠嗎?

但是做了一些研究之後,我看到了這一點:

https://www.youtube.com/watch?v=G-lGCC4KKok

http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html

我應該是 「僞造」 的櫃檯?有更好的方法嗎? 歡迎任何更好的或改進的建議。

在此先感謝。

回答

1

您是logging user interactions with your application

日誌記錄可以是存儲這種數據的好方法。只需在您的Flask應用程序中設置一個簡單的記錄器,每次用戶加載帖子頁面時都會創建一個日誌。將user_id,post_id和時間戳保存到日誌文件中。 (注意:如果您擔心日誌文件變得過大,您可以configure the logger to start a new file every day)。

安裝日誌記錄後,您可以使用實用程序來解析日誌併爲您提供彙總的結果,例如您要求的結果。或者你甚至可以用Python解析日誌並運行自定義的「查詢」。我想推薦使用ELK stack。 Logstash,Elasticsearch和Kibana是免費的開源項目。在一個小時內,您可以在您的網站上找到漂亮的用戶活動圖表和圖表。

+0

嗯..這看起來很有趣。目前我不一定對圖表或圖表感興趣。我的主應用程序/ api如何獲取計數? ELK堆棧在將新行添加到postgresql數據庫中的好處是什麼? – user805981

+0

哦!我不知道你想讓計數成爲你的應用數據的一部分。我以爲你想看看sys-ops跟蹤等用戶活動。如果您希望應用程序使用userpostviews數據,那麼它必須位於數據庫中。我推薦Postgres分區表。 https://blog.engineyard.com/2013/scaling-postgresql-performance-table-partitioning –

+0

這看起來更像我在找什麼。關於在nosql數據庫處理視圖計數器記錄的同時使用nosql數據庫的想法是什麼? – user805981