Mysql

我應該如何將 apache 日誌保存到 mysql 表中?

  • February 4, 2013

這是一個用於查看 apache 日誌的 php 腳本。

我想將 apache 日誌保存到 mysql 數據庫中。

然後使用 mysql REGEXP 搜尋添加一些標記 url 的規則,例如: SET tag=‘some tag’ WHERE url REGEXP ‘some pattern’;

a)我是否應該在每次訪問它們時使用一個表來儲存所有 url,即使它們重複然後進行 REGEXP 搜尋並將標籤應用於所有這些?

b)或者最好保存一個具有唯一 url 的表,以及另一個具有 url 的 id 和訪問時間的表?然後,如果 url 重複,則標記將應用於該行較少的表。

如果選項 ‘b’ 更好,我應該為唯一 url 使用什麼樣的索引?varchar(4000) 主鍵?我正在考慮創建 url 字元串的 md5 雜湊並將其用作主鍵,因為它會更短。

我問這個問題是因為我想知道在以下情況下什麼是最佳性能:

  • 使用正則表達式搜尋標記許多 url
  • 將數千個 url 導入一張表並確保它們是唯一的

謝謝!

因為這實際上是您正在擷取的記錄數據,所以我首先將其儲存為原始形式,然後根據需要對其進行 ETL/規範化。

對於搜尋,您可以將 URL 的前幾個字元編入索引。假設選項是 http:// 和 https:// - 然後將索引大小限制為通過協議部分的三個字元。

CREATE TABLE log ( 
datetime_created DATETIME, 
url VARCHAR(1024), 
domainname VARCHAR(255),
someotherdata VARCHAR(255), 
...
INDEX `idx_domain` (domainname(3))) 
ENGINE=InnoDB ROW_FORMAT=COMPRESSED; 
  • InnoDB 將允許您在不鎖定它的情況下搜尋表。
  • 壓縮將有助於磁碟空間。
  • INDEX idx_domain(domainname(3)) 將索引域名列的前 3 個字元並加快搜尋速度。但是,REGEXP 的策略將是嘗試在域名的前面進行匹配。

如果網站變得流行,規模最終將成為一個問題,所以買家要小心。

為什麼不使用 apache mod_log_sql ?它幫助我將所有日誌資訊直接發送到 Mysql DB。但是讓我提醒您,在負載較重的伺服器上使用它會導致一些問題,我看到的 1 個最大問題是 Mysql 連接超時。

引用自:https://dba.stackexchange.com/questions/18243