2012-06-17 27 views
0

我有請求數據的一個大的數據庫表,很像Apache的請求日誌,中:處理和匹配大量數據的約50萬行

/profile/Billy 
Mozilla..... 
2012-06-17... 

/profile/Jane 
Mozilla..... 
2012-06-17... 

request_url 
user_agent 
created 
包含這樣的數據

然後我有我的用戶數據庫表,我的所有用戶數據包括用戶名。

目前,每天晚上,我處理由排爲前一天的請求數據,行,看它是否包含匹配的用戶表中的用戶名之一的URL。如果是這樣,我會在另一個存儲統計信息的表格中增加總數,以便用戶查看他們在特定日期獲得的瀏覽量。

然而,隨着數據集不斷,這正成爲資源密集型的,也可以花費很長的時間才能完成,通過URL分組請求數據,並抓住該組計數時也是如此。

有沒有更好的方式處理這些信息以獲得我需要的最終結果?請求數據將被記錄下來,所以最好在事後生成統計數據,而不是在每個頁面視圖上增加總數。

我在一臺服務器上運行此操作,因此不需要在多個服務器上分佈式處理數據。

回答

2

打開一個新的日誌表。當這一天完成後,用它來增加總數,然後將它附加到那個巨大的主日誌表並刪除它。

2

增加每個頁面視圖的總數是您的最佳選擇。它可以爲每個用戶分別節省「搜索」的麻煩。這只是一個額外的查詢更新每個網頁瀏覽,因此處理負荷分散在全天而不是單一時間(加你的數據保持更新,而不是每天更新)

如果你堅持在SQL這樣做,你可能每天都要考慮

SELECT COUNT(request_url) FROM your_table WHERE request_url LIKE %/profile/username% 

(雖然我不知道,如果這是你已經在做什麼?)

+0

是的,這與我所做的相當接近。我有些簡化了我的例子,因爲我會查找諸如/ profile/username/photos之類的內容,並將它們視爲綜合瀏覽量。 – Jim

0

開始尋找像Infobright這樣的分析數據庫。基於列的存儲引擎在大數據計劃中非常龐大,專爲集合內存分析以及臨時查詢而設計。

免責聲明:筆者隸屬於Infobright的。