假設我有一個網站,其用戶配置文件具有可公開訪問的頁面(每個配置文件各有幾頁)。我想顯示用戶頁面查看統計信息(例如,每頁,某個時間段等)。什麼是存儲頁面瀏覽量的好方法?配置文件頁面視圖的數據模型
這是我的想法是:
Table Page Views
================
- Id (PK)
- Profile Id (FK)
- Page Id (FK)
- Timestamp
恐怕這個解決方案將無法擴展。建議?
假設我有一個網站,其用戶配置文件具有可公開訪問的頁面(每個配置文件各有幾頁)。我想顯示用戶頁面查看統計信息(例如,每頁,某個時間段等)。什麼是存儲頁面瀏覽量的好方法?配置文件頁面視圖的數據模型
這是我的想法是:
Table Page Views
================
- Id (PK)
- Profile Id (FK)
- Page Id (FK)
- Timestamp
恐怕這個解決方案將無法擴展。建議?
你的直覺是正確的,寫入數據庫沒有規模特別好。您希望避免每個頁面請求的數據庫事務。
注意到,縮放真的是你的擔憂嗎?如果是這樣,並假設一個互聯網網站(而不是內部),跳過滾動自己的和谷歌分析或類似的收集命中的數據。然後獲取該數據並處理它以生成每個配置文件的總計。然而,如果你真的想自己做這件事,可以考慮日誌解析。如果您可以枚舉每個配置文件的URL,請使用該信息以及您的Web服務器日誌來生成命中總數。諸如Microsoft's Log Parser之類的工具可以處理很多不同的格式,或者* nix命令行工具(如sed和grep)在這裏是您的朋友。
如果枚舉不可能更改代碼以記錄您需要的信息並處理該日誌文件。
使用日誌,使用批處理過程生成結果,並使用MySQL的LOAD DATA將這些結果插入到數據庫中。
關於推薦您自己的方法的最終說明我建議 - 如果您的羣集環境比每個請求的數據庫事務容量更大,則會更好地規模。
這取決於您希望提供哪種報告。
如果您希望能夠說出「這是在這兩個日期之間查看您的網頁的人員列表」,那麼您必須存儲您提出的所有數據。
如果您只需要說「您的頁面在這兩個日期之間被查看了X次」,那麼您只需要一個帶有頁面ID,日期和計數器的表格。使用單個UPDATE查詢更新每個頁面視圖上的計數器列。
現在,我想我只需要#2場景。你將如何模擬這種情況? – StackOverflowNewbie 2010-11-22 03:06:06
UPDATE profile_views SET counter = counter + 1 WHERE page_id = X and date = CURRENT_DATE – 2010-11-22 03:08:47
我想你可以有
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
是多個表的一個好主意嗎?一張桌子不會更好嗎? – StackOverflowNewbie 2010-11-22 03:06:57
我沒有使用Google Analytics(分析)。它是否暴露了我可以用來查詢的API(我通過URL假設,這意味着我需要以某種方式設計我的URL)。此外,這是一個LAMP應用程序,我如何訪問Apache日誌以進行報告? – StackOverflowNewbie 2010-11-22 03:05:16
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