2011-07-14 104 views
0

我想以一種快速的方式將關於請求的信息存儲到我的網站,這不會給我的數據庫帶來額外的壓力。我們的目標是使用這些信息來防止濫用和收集用戶如何與網站互動(ip,GET/POST,url/action,timestamp)的信息。批量保存到數據庫的大批量日誌記錄?

我正在保存每個頁面請求到數據庫的新行。但是,當服務器也已經將相同的信息記錄到nginx日誌文件時,這會浪費額外的數據庫調用資源。

我想知道我能做些什麼來更好地處理這個問題,我有兩個想法,我想知道是否有更好的方法。

  1. CRON作業每天解析訪問日誌並保存爲批量事務到數據庫。
  2. RAM緩存(redis/memcached)存儲關於請求的數據,然後CRON保存到數據庫。

但是,我不知道如何使用鍵值緩存以我可以檢索所有記錄並將它們插入數據庫的方式存儲數據。

我也不知道如何解析訪問日誌的方式,我不會重新讀取條目。

如何以有效的方式記錄訪問嘗試?

回答

1
  1. 使用,如果你使用MySQL延遲插入(其他引擎不需要這個)
  2. 謹防指標進行寫操作昂貴
  3. 旋轉表每分鐘/小時/天
  4. 注意過度規範化和外鍵

一種常見模式是使用簡單的表進行普通寫入,並將日誌每分鐘/小時移動到一組主表中。主集可以高度標準化並編制索引,並且可以實現簡單的非標準化表(以節省空間)。

另一種模式是有一個簡單的大表並每分鐘/小時運行一次彙總查詢。簡單的表可以按日期進行索引(請記住使用本機類型)。

最後的技巧,使架構和腳本冪等(如果你運行多個數據仍然有效)。有點閃爍和簡單重新運行某個特定窗口的分鐘/小時/天可以快速修復所有內容,而不是大規模重建。