我正在考慮將所有站點/用戶操作記錄到數據庫,並希望獲得關於此的一些輸入。此日誌將用於各種事情,包括節流(登錄嘗試等),客戶服務,一般維護等。將操作記錄到數據庫 - 模式和建議 - 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
這會是一個很好的方法嗎?
爲什麼選擇InnoDB進行日誌記錄?通常MYISAM用於記錄。 – Dor
@Dor爲什麼?不要沒有理由地放棄這塊金塊。 :-)通過MyISAM降低資源利用率?表級鎖定(MyISAM)會成爲一個問題嗎?等等。謝謝。 – Wiseguy
@Wiseguy:我發佈了一個解釋這個和更多的答案... – Dor