2010-06-03 53 views
1

目前我正在使用mysql來記錄所有用戶進入我管理的網站的所有流量。數據庫在一個月內增長到近1100萬行,查詢速度變得很慢。有沒有更有效的方法來記錄用戶信息?我們所存儲的是他們的請求,useragent和他們的ip,並將其與某個網站相關聯。跟蹤數據庫中所有用戶流量的最有效方式是什麼

+0

你是如何查詢這張桌子的? (例如,你總結整個表?爲用戶提取每個單獨的記錄嗎?限制你的查詢,例如時間範圍? – nos 2010-06-03 17:03:22

回答

4

爲什麼不嘗試Google Analytics(分析)?即使你認爲這對你來說不足夠,我敢打賭你可以跟蹤99%的你想跟蹤的東西。

2

答案完全取決於您期望在查詢方檢索的內容。你在尋找綜合信息,你在尋找所有的歷史還是隻有一部分?通常,如果您需要查看每一行以找出所需內容,則存儲在基本文本文件中的速度最快。

+0

我通常需要提取唯一的匹配,或者有時候流量會有一個與它相關的數字,我需要找到一定數量以上的所有流量的總和(對不起,我故意模糊了網站的性質)lol – Brendan 2010-06-03 17:06:50

+0

如果你正在通過IP確定唯一性,請確保你正在使用inet_aton並存儲爲unsigned int 。然後索引這個字段。 – Gary 2010-06-03 17:32:08

0

想要在數據上運行哪種查詢?我假設你的大部分查詢都是在當前或最近的時間窗口中的數據。我建議使用基於時間的表格分區。這會使查詢更快,因爲查詢只會觸及具有數據的分區,因此磁盤搜索量減少。還要定期清除舊數據並將其放在彙總表中。一些有用的鏈接:

0

最有效的方式可能是讓Apache(假設多數民衆贊成在該網站上運行的是什麼),只需使用其內置的日誌記錄文本日誌,並配置如AWStats。這消除了您自己記錄此信息的需要,並且應該爲您提供您正在查找的信息 - 可能已在現有報告中完成配置。這樣做比谷歌分析的好處將是它的服務器端跟蹤 - 等

0

也許說明明顯,但你有一個很好的索引與您正在查詢的關係?

0

1)看看使用Piwik執行Google Analytic類型跟蹤,同時保留對MySQL數據的控制。 2)如果您必須繼續使用您自己的系統,請使用InnoDB Plugin來支持壓縮的表類型。另外,將IP轉換爲無符號整數,將useragent和request轉換爲使用Innodb壓縮或歸檔引擎壓縮的無符號整型引用查找表。

3)跳過分區並按月分割數據庫。

0

這就是「數據倉庫」的用途。考慮購買一本關於倉儲的好書。

在某些「當前活動」模式中收集原始數據。 (a)從當前活動模式中分離出來,(b)針對計數/總和/分組查詢進行優化。

移動,BTW表示插入倉庫模式並從當前活動模式中刪除。

將正在進行的事務處理與查詢/分析處理分開。

相關問題