2012-08-04 45 views
1

我的數據庫中有大約10萬名藝術家/樂隊。我希望能夠跟蹤每個樂隊的觀看次數,例如,如果我正在查看Pearl Jam指標,我希望能夠在2012年1月1日看到他們看到了10,000次觀看,在2012年1月1日他們看到12,000個視圖...等等。分貝表

捕獲這些數據的最佳方法是什麼?我不在尋找代碼幫助,更多地尋找理論/建議。

我想執行以下操作:

  1. 命中表藝術家。每次查看Pearl Jam(或任何其他藝術家)時,然後插入一個新行以跟蹤此視圖(包括藝術家ID和時間戳)。
  2. 最近24小時在這些行上運行夜間腳本。按藝術家ID分組並統計。將此計數插入到該特定日期的每位藝術家的新表格中。
  3. 截斷這個命中表,所以它不會變得難以置信的巨大。
  4. 爲了獲取視圖,請選擇藝術家ID。

這是正確的思路嗎?有什麼建議麼?

回答

2

我是開源分析平臺Countly的開發人員,希望與您分享我的經驗。

向藝術家插入每行視圖的新行並映射 - 每天減少這些結果肯定是一個解決方案(它實際上是舊分析解決方案已使用的解決方案),但您可以採用更好的方法選擇。然而,這種方法需要使用面向文檔的數據庫,就像MongoDB一樣。

當對藝術家有看法時,您會對相關字段進行增量,就像;

db.views.update({'artist_id': 1}, { 
    '$inc': { 
     "views": 1, 
     "2012.views": 1, 
     "2012.8.views": 1, 
     "2012.8.4.views": 1 
    } 
}) 

而且您將在視圖集合中獲取文檔,如下所示;

{ 
    "artist_id": 1, 
    "2012": { 
     "8": { 
      "4": { 
       "views": 1 /* today */ 
      }, 
      "views": 1 /* august */ 
     }, 
     "views": 1 /* 2012 */ 
    }, 
    "views": 1 /* all time */ 
} 

該解決方案不需要批處理,實際上是實時的。如果您想查看8月份的所有統計數據,只需獲取下面的結果,那麼您將獲得8月份所有日期的數據以及8月份的總體數據。

db.views.findOne({"artist_id": 1}, {"2012.8": 1}) 

或者如果您只需要2012年的總視圖;

db.views.findOne({"artist_id": 1}, {"2012.views": 1}) 

假設您正在使用LAMP堆棧,您可以查看MongoDB PHP driver