2010-11-22 44 views
2

假設我有一個網站,其用戶配置文件具有可公開訪問的頁面(每個配置文件各有幾頁)。我想顯示用戶頁面查看統計信息(例如,每頁,某個時間段等)。什麼是存儲頁面瀏覽量的好方法?配置文件頁面視圖的數據模型

這是我的想法是:

Table Page Views 
================ 
- Id (PK) 
- Profile Id (FK) 
- Page Id (FK) 
- Timestamp 

恐怕這個解決方案將無法擴展。建議?

回答

1

你的直覺是正確的,寫入數據庫沒有規模特別好。您希望避免每個頁面請求的數據庫事務。

注意到,縮放真的是你的擔憂嗎?如果是這樣,並假設一個互聯網網站(而不是內部),跳過滾動自己的和谷歌分析或類似的收集命中的數據。然後獲取該數據並處理它以生成每個配置文件的總計。然而,如果你真的想自己做這件事,可以考慮日誌解析。如果您可以枚舉每個配置文件的URL,請使用該信息以及您的Web服務器日誌來生成命中總數。諸如Microsoft's Log Parser之類的工具可以處理很多不同的格式,或者* nix命令行工具(如sed和grep)在這裏是您的朋友。

如果枚舉不可能更改代碼以記錄您需要的信息並處理該日誌文件。

使用日誌,使用批處理過程生成結果,並使用MySQL的LOAD DATA將這些結果插入到數據庫中。

關於推薦您自己的方法的最終說明我建議 - 如果您的羣集環境比每個請求的數據庫事務容量更大,則會更好地規模

+0

我沒有使用Google Analytics(分析)。它是否暴露了我可以用來查詢的API(我通過URL假設,這意味着我需要以某種方式設計我的URL)。此外,這是一個LAMP應用程序,我如何訪問Apache日誌以進行報告? – StackOverflowNewbie 2010-11-22 03:05:16

+0

Google Analytics有一個用於導出數據的API:http://code.google.com/apis/analytics/docs/您將從每個網址獲取數據。 Apache日誌位置取決於* nix版本:http://www.cyberciti.biz/faq/apache-logs/我會使用任何應用程序服務器來解析grep並解析日誌,然後通過sed運行它獲得你需要的價值。 – orangepips 2010-11-22 03:36:23

0

這取決於您希望提供哪種報告。

如果您希望能夠說出「這是在這兩個日期之間查看您的網頁的人員列表」,那麼您必須存儲您提出的所有數據。

如果您只需要說「您的頁面在這兩個日期之間被查看了X次」,那麼您只需要一個帶有頁面ID,日期和計數器的表格。使用單個UPDATE查詢更新每個頁面視圖上的計數器列。

+0

現在,我想我只需要#2場景。你將如何模擬這種情況? – StackOverflowNewbie 2010-11-22 03:06:06

+0

UPDATE profile_views SET counter = counter + 1 WHERE page_id = X and date = CURRENT_DATE – 2010-11-22 03:08:47

0

我想你可以有

tblPerson

personid(pk) 
activeProfileID(fk) -- the active profile to use. 
timestamp 

的tblpage

pageid(pk) 
data 

tblPersonProfile

profileID(pk) 
timestamp 

tblProfilePages

profilePageID(pk) 
profileid(pk) 
pageid(pk) 
isActive 
+0

是多個表的一個好主意嗎?一張桌子不會更好嗎? – StackOverflowNewbie 2010-11-22 03:06:57