2017-02-14 47 views
0

我正在運行數據庫進行日誌分析。目前我使用MySQL數據庫和我的分析表看起來像這樣:哪種數據庫類型用於日誌分析?

  • UUID
  • REQUEST_ID
  • REQUEST_TIMESTAMP
  • RESPONSE_TIMESTAMP
  • RUNTIME
  • SERVER_NAME

我使用此表爲每個條目創建視圖,時間爲5分鐘聚合和每日聚合。我每天插入大約400,000個條目。目前這張桌子上有大約7000萬行。

我的實際問題是,我的查詢變慢,我的插入/更新查詢以及我的聚合查詢。

因此,我創建了我的每日聚合的第二個表。每天一份工作將運行,以便在最後一天進行彙總。第二項工作將刪除原表中超過30天的所有條目。

我的問題: 這是正確的方法,還是不同的表結構,甚至是另一個數據庫(例如NoSQL,Graph-database等)更好?

回答

1

除非必須,否則不要索引UUID。這是非常隨機的,並導致大量的I/O。請參閱here。如你所討論的那樣,構建Summary表;他們是使數據倉庫性能良好的主要方式。但是,讓我們看看你有什麼 - SHOW CREATE TABLESELECTs,再加上表格大小。

你是如何攝取的? Here是縮放這樣的一些技巧。 400K /天和70M的表對於MySQL來說沒有問題。

server_name(也可能是其他列)的標準化 - 請參閱攝取鏈接。

爲什麼有更新?日誌往往不需要更新。彙總表可能使用批量IODKU,這是一種更新;那是你用的嗎?

至於刪除舊數據,PARTITION BY RANGE(TO_DAYS(...))與32個分區,每晚使用DROP PARTITION。這將是DELETE更快:Partition tips

多少RAM?使用InnoDB? 70M行大約需要7GB? innodb_buffer_pool_size的值是多少?

在什麼情況下你曾觸碰過一天以前的數據?如果'從不',那麼緩存應該不成問題。如果'經常',讓我們研究這些案例。