相關文章:
時序數據庫 InfluxDB(一)
時序數據庫 InfluxDB(二)
時序數據庫 InfluxDB(三)
時序數據庫 InfluxDB(四)
時序數據庫 InfluxDB(五)正則表達式
InfluxDB 數據的寫入以下圖所示:數據庫
全部數據先寫入到 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 等數據。函數
存儲引擎的組成部分:性能
爲了應對不一樣的負載狀況,我須要機器具備怎樣的硬件配置?編碼
因爲集羣模式只有商業版本,所以這裏只看免費的單機版的狀況。spa
爲了定義負載,咱們關注如下三個指標:
對於查詢狀況,咱們根據複雜程度分爲三級:
簡單查詢:
中等複雜度查詢:
複雜查詢:
硬件配置須要關注的有:CPU 核數,RAM 內存大小,IOPS 性能。
IOPS( Input/Output Operations Per Second ):每秒讀寫數,衡量存儲設備(如 SSD 固態硬盤、HDD 機械硬盤等)的性能指標。
不一樣負載狀況下的硬件配置參考以下:
因爲 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"
我的公衆號持續輸出原創文章,有興趣的能夠關注下。