時序數據庫 InfluxDB(四)

相關文章:
時序數據庫 InfluxDB(一)
時序數據庫 InfluxDB(二)
時序數據庫 InfluxDB(三)
時序數據庫 InfluxDB(四)
時序數據庫 InfluxDB(五)正則表達式


存儲引擎


InfluxDB 數據的寫入以下圖所示:
屏幕快照 2019-10-28 下午3.36.39.png數據庫

全部數據先寫入到 WAL( Write Ahead Log )預寫日誌文件,並同步到 Cache 緩存中,當 Cache 緩存的數據達到了必定的大小,或者達到必定的時間間隔以後,數據會被寫入到 TSM 文件中。segmentfault

爲了更高效的存儲大量數據,存儲引擎會將數據進行壓縮處理,壓縮的輸入和輸出都是 TSM 文件,所以爲了以原子方式替換以及刪除 TSM 文件,存儲引擎由 FileStore 負責調節對全部 TSM 文件的訪問權限。緩存

Compaction Planner 負責肯定哪些 TSM 文件已經準備好了能夠進行壓縮,並確保多個併發壓縮不會互相干擾。數據結構

Compactor 壓縮器則負責具體的 Compression 壓縮工做。併發

爲了處理文件,存儲引擎經過 Writers/Readers 處理數據的寫和讀。另外存儲引擎還會使用 In-Memory Index 內存索引快速訪問 measurements、tags、series 等數據。函數

屏幕快照 2019-10-28 下午3.06.27.png

存儲引擎的組成部分:性能

  • In-Memory Index :跨分片的共享內存索引,並非存儲引擎自己特有的,存儲引擎只是用到了它。
  • WAL :預寫日誌。
  • Cache :同步緩存 WAL 的內容,並最終刷寫到 TSM 文件中去。
  • TSM Files :特定格式存儲最終數據的磁盤文件。
  • FileStore :調節對磁盤上全部TSM文件的訪問。
  • Compactor :壓縮器。
  • Compaction Planner :壓縮計劃。
  • Compression :編碼解碼壓縮。
  • Writers/Readers :讀寫文件。

硬件指南


爲了應對不一樣的負載狀況,我須要機器具備怎樣的硬件配置?編碼

因爲集羣模式只有商業版本,所以這裏只看免費的單機版的狀況。spa

爲了定義負載,咱們關注如下三個指標:

  • 每秒寫入
  • 每秒查詢
  • series 基數

對於查詢狀況,咱們根據複雜程度分爲三級:

  • 簡單查詢:

    • 幾乎沒用函數和正則表達式
    • 時間範圍在幾分鐘,幾小時,或者一天以內
    • 執行時間一般在幾毫秒到幾十毫秒
  • 中等複雜度查詢:

    • 使用了多個函數和一兩個正則表達式
    • 可能使用了複雜的 GROUP BY 語句,或者時間範圍是幾個星期
    • 執行時間一般在幾百毫秒到幾千毫秒
  • 複雜查詢:

    • 使用了多個聚合、轉換函數,或者多個正則表達式
    • 時間跨度很大,有幾個月或幾年
    • 執行時間達到秒級

硬件配置須要關注的有:CPU 核數,RAM 內存大小,IOPS 性能。

IOPS( Input/Output Operations Per Second ):每秒讀寫數,衡量存儲設備(如 SSD 固態硬盤、HDD 機械硬盤等)的性能指標。

不一樣負載狀況下的硬件配置參考以下:
屏幕快照 2019-10-28 下午4.37.37.png
因爲 SSD 固態硬盤的性能更高,官方也建議使用 SSD ,上圖也是使用 SSD 的狀況。

對於元數據,諸如 database name、measurement、tag key、tag value、field key 都只會存儲一次,只有 field value 和 timestamp 每一個點都存儲。非字符串的值大約須要三個字節,字符串的值須要的空間大小不固定,須要由壓縮狀況肯定。

內存確定是越大越好,可是若是 series 基數超過千萬級別,在默認使用的 in-memory 索引方式下,會致使內存溢出,在數據結構設計時須要注意。

經過將 wal 和 data 目錄設置到不一樣的存儲設備上,有利於減小磁盤的爭用,從而應對更高的寫入負載。相關配置項(默認的配置文件爲 influxdb.conf ):

[data]
    dir = "/var/lib/influxdb/data"
    wal-dir = "/var/lib/influxdb/wal"

我的公衆號持續輸出原創文章,有興趣的能夠關注下。
qrcode_for_gh_9ccbe5e0dfb3_258.jpg

相關文章
相關標籤/搜索