2011-08-24 72 views
2

我正在考慮將所有站點/用戶操作記錄到數據庫,並希望獲得關於此的一些輸入。此日誌將用於各種事情,包括節流(登錄嘗試等),客戶服務,一般維護等。將操作記錄到數據庫 - 模式和建議 - MySQL

這樣好嗎?我想這取決於交通量,但這會導致連續插入的問題嗎? (我正在考慮將InnoDB用於FK限制)

如果不是,那麼您會建議什麼樣的模式,以便它足夠靈活以支持來自已註冊用戶和匿名用戶的各種類型的操作?

我在想是這樣的:

CREATE TABLE `logs` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
`action` varchar(128) COLLATE utf8_bin NOT NULL, 
`user_id` bigint(20) unsigned DEFAULT NULL, 
`value` varchar(128) COLLATE utf8_bin DEFAULT NULL, 
`ip` varchar(40) COLLATE utf8_bin NOT NULL, 
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`), 
KEY `action` (`action`,`user_id`), 
CONSTRAINT `logs_ibfk_1` FOREIGN KEY (`action`) REFERENCES `logs_actions` (`name`) ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin 

CREATE TABLE `logs_actions` (
`id` int(5) NOT NULL AUTO_INCREMENT, 
`name` varchar(128) COLLATE utf8_bin NOT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `name` (`name`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin 

這會是一個很好的方法嗎?

+0

爲什麼選擇InnoDB進行日誌記錄?通常MYISAM用於記錄。 – Dor

+0

@Dor爲什麼?不要沒有理由地放棄這塊金塊。 :-)通過MyISAM降低資源利用率?表級鎖定(MyISAM)會成爲一個問題嗎?等等。謝謝。 – Wiseguy

+0

@Wiseguy:我發佈了一個解釋這個和更多的答案... – Dor

回答

2

user_id bigint(20),什麼!你是Facebook的開發者嗎? ;-)不會有4字節的int足夠嗎? See MySql Numeric Types

我將AUTO_INCREMENT放在logs_actions上,因爲您需要將應用程序編碼爲特定值,所以您需要在插入時控制此值。

另外,如果你想減少一點開銷,考慮放棄FK(至少級聯)。

0

我認爲MyIsam或Archive表更適合於日誌記錄。因爲你不需要事務或併發訪問表。如果不打算從表中刪除數據MyIsam將允許您進行併發插入,這樣可以避免阻塞整個表。

使用外鍵會減慢插入到表中,所以如果您決定使用innodb嘗試避免這種情況。

關於表方案:

用於存儲IP,你應該選擇的int類型,並使用INET_ATON功能。見http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton

1

  • 用於記錄使用MyISAM表,它們使併發的SELECT & INSERT查詢 - 表級鎖不會干涉這些類型的查詢。
  • 在MySQL中,UTF-8列每個字符需要3個字節,因此一列將能夠保存128個UTF-8字符,實際上能夠存儲128 * 3 = 384個字節,這個字節大於256,因此這些列將有2個字節來計算列中字符的數量,而不是1個字節(這可能是您所期望的)。
  • ip列使用INT列類型 - 將節省大量存儲空間並可顯着縮短檢索時間。
  • 嘗試批量文本列action & value成一列(可能命名爲queryString這表示用戶在頁面動作&值)
  • 有這個列順序的索引:

    KEY `action` (`action`,`user_id`) 
    

    不好應該避免,因爲文本列先出現。

  • 我建議學習如何優化模式&查詢爲MySQL與這個偉大的書:

    高性能的MySQL:Optimi-矩陣特殊積,備份,複製和 更多,第二版,巴倫·施瓦茨等人。版權所有2008奧賴利 媒體公司,9780596101718.

相關問題