iT邦幫忙

2024 iThome 鐵人賽

DAY 14
1
DevOps

時間序列資料庫探討 - Prometheus系列 第 14

Prometheus - 資料儲存格式

  • 分享至 

  • xImage
  •  

本篇提問

  • Prometheus 什麼時候會重寫檔案。
  • wal 檔的生命週期?
  • Prometheus 的索引格式是什麼?
  • 允許 OOO 的情況下,怎麼分檔案呢?

資料刪除

上篇題到時間序列資料的壓縮。以兩小時為區段,壓縮後的時間序列資料會被存在檔案系統中。
除了壓縮以外,一般常見縮限檔案大小的方式就是刪除沒用的資料。
Prometheus 刪除資料的方式主要有兩種。

  • 定時刪除太舊的檔案(預設為 15 天前的資料)
  • API /api/v1/admin/tsdb/delete_series 刪除時間序列

然而 API 並不會直接開啓所有 Chunk,把對應的壓縮資料刪除後,平移其他時間序列。而是先記下這些資料之後要被刪除,有時間時再把所有檔案讀出來,依記下的結果重寫檔案。

本節提問

  • Prometheus 什麼時候會重寫有刪掉序列的檔案。

Write Ahead Log

由上資料刪除的做法可見,Prometheus 並不排拆「先把操作記下來,之後再把這些操作結果塞進檔案」的做法,並且有能力處理所衍生的問題。例如把結果塞進檔案的過程中,其它線程也要能讀到正確的資料。
「先把操作記下來,之後再存」這個動作,在許多的資料庫系統中,都會使用在資料寫入的場景。這個「操作記錄」稱為 Write Ahead Log,以 Prometheus 來說,/data 下面會有一個 wal 資料夾,裡面放還沒壓成檔案的新資料

本節提問

  • wal 在 Prometheus 掛掉後重新啓動時,是怎麼載入的?
  • wal 裡的檔案,什麼時候會被刪掉?

資料索引

資料庫之所以要「先記下,之後再存」顯然是因為「存」的過程比「記」還要複雜。為什麼存要存得複雜呢?可能是儲存資料的狀態比需時刻符合某些條件,所以比較麻煩;也可能是為了讓讀資料的時候可以輕鬆一點,所以先做一些事,如建立索引、把有關的資料存在附近、算出讀資料時會用到的中間值等⋯其中建立索引幾乎是每個資料庫系統都要做的事。

本節提問

  • Prometheus 的索引格式是什麼?

區段分割問題

上篇提到 Prometheus 是可以設定允許 OOO(樣本亂序)的。
亂序顯然不利於用嚴格的時間區段分檔案。

本節提問

  • 允許 OOO 的情況下,怎麼分檔案呢?
  • 混亂的檔案時間能不能整理重寫呢?

上一篇
Prometheus - 時間序列資料壓縮
下一篇
Prometheus - 時間序列資料儲存格式
系列文
時間序列資料庫探討 - Prometheus30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言