時序數據庫 InfluxDB(三)

相關文章:
時序數據庫 InfluxDB(一)
時序數據庫 InfluxDB(二)
時序數據庫 InfluxDB(三)
時序數據庫 InfluxDB(四)
時序數據庫 InfluxDB(五)數據庫


數據類型


InfluxDB 是一個無結構模式,這也就是說你無需事先定義好表以及表的數據結構。segmentfault

InfluxDB 支持的數據類型很是簡單:緩存

  • measurement : string
  • tag key : string
  • tag value : string
  • field key : string
  • field value : string , float , interger , boolean

你能夠看到除了 field value 支持的數據類型多一點以外,其他全是字符串類型。數據結構

固然還有最重要的 timestamp ,InfluxDB 中的時間都是 UTC 時間,並且時間精度很是高,默認爲納秒。性能


數據結構設計


在實際使用中,數據都是存儲在 tag 或者 field 中,這二者最重要的區別就是,tag 會構建索引(也就是說查詢時,where 條件裏的是 tag ,則查詢性能更高),field 則不會被索引。spa

存儲數據究竟是使用 tag 仍是 field ,參考如下原則:設計

  • 經常使用於查詢條件的數據存儲爲 tag 。
  • 計劃使用 GROUP BY() 的數據存儲爲 tag 。
  • 計劃使用 InfluxQL function 的數據存儲爲 field 。
  • 數據不僅是 string 類型的存儲爲 field 。

對於標識性的名稱,如 database、RP、user、measurement、tag key、field key 這些應該避免使用 InfluxQL 中的關鍵字。日誌

其它須要注意的原則:code

  • 不要有過於龐大的 series 。若在 tag 中使用 UUID、hash、隨機字符串等將會致使數量龐大的 series ,這將會致使更高的內存使用率,尤爲是系統內存有限的狀況下須要額外注意。
  • measurement 名稱不該該包含具體的數據(表名就是一個單純的表名),你應該使用不一樣的 tag 去區分數據,而不是 measurement 名稱。
  • 一個 tag 中不要放置多條信息,複雜的信息合理拆分爲多個 tag 有助於簡化查詢並減小使用正則。

索引


InfluxDB 經過構建索引能夠提升查詢性能。InfluxDB 中的索引有兩種:In-memory 和 TSI 。這兩種索引只能選擇一種,且沒法動態更改,一旦更改必須重啓 InfluxDB 。索引

In-memory :索引被存儲在內存中,這也是默認使用的方式,性能更高。

TSI( Time Series Index ):In-memory 索引能夠支持千萬級別的 series ,然而內存資源終歸是有限的,爲了支持億級和十億級別的 series 數據,TSI 應運而生,其會將索引映射到磁盤文件上。

索引相關配置項(默認的配置文件爲 influxdb.conf ):

  • 索引方式,inmem 或者 tsi1 :
index-version = "inmem"
  • in-memory 相關設置:
max-series-per-database = 1000000
max-values-per-tag = 100000

max-series-per-database :每一個數據庫容許的最大 series 數量,默認一百萬,一旦達到上限,再寫入新的 series 則會獲得一個 500 錯誤,向已經存在的 series 寫入數據不受影響。設置爲 0 則意味着沒有限制。

max-values-per-tag :每一個 tag key 容許的最大 tag values 數量,默認十萬,相似的,一旦達到上限,沒法寫入新的 tag value ,而向已經存在的 tag value 寫入數據不受影響。設置爲 0 則意味着沒有限制。

  • TSI( tsi1 )相關設置:
max-index-log-file-size = "1m"
series-id-set-cache-size = 100

max-index-log-file-size :預寫日誌的文件大小達到多大的閾值以後,將其壓縮爲索引文件,閾值越低,壓縮越快,堆內存使用率越低,但會下降寫入的吞吐量。

series-id-set-cache-size :使用內存緩存的 series 集的大小,因爲 TSI 索引存儲在了磁盤文件中,所以使用時須要額外的計算工做,但若是將索引結果緩存起來的話就能夠避免重複的計算,提升查詢性能。默認緩存 100 個 series ,這個值越大則使用的堆內存越大,設置爲 0 則不緩存。

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

相關文章
相關標籤/搜索