influxdb 端口、數據結構、寫數據


InfluxDB 是一個開源,分布式,時間序列,事件,可度量和無外部依賴的數據庫。

InfluxDB有三大特性:

  1. Time Series (時間序列):你可以使用與時間有關的相關函數(如最大,最小,求和等)
  2. Metrics(度量):你可以實時對大量數據進行計算
  3. Events(事件):它支持任意的事件數據

端口暴露

influxdb會監聽4個端口:

tcp        0      0 0.0.0.0:8099                0.0.0.0:*                   LISTEN      29458/influxdb
tcp        0      0 0.0.0.0:8083                0.0.0.0:*                   LISTEN      29458/influxdb
tcp        0      0 0.0.0.0:8086                0.0.0.0:*                   LISTEN      29458/influxdb
tcp        0      0 0.0.0.0:8090                0.0.0.0:*                   LISTEN      29458/influxdb

其中單機使用只需要用到兩個,另外兩個是分布式部署時采用的

  • 8083  WEB 管理界面
  • 8086 HTTP API 接口服務

 

數據結構

在 influxdb 中 database 、 series、point 分別類似於數據庫系統中的 數據庫、表、列的概念。

所有的數據項在創建時都會自動增加兩個字段:

  • time 數據創建的時間,時間戳類型
  • sequence_number 字段是 influxdb 數據庫維護的,類似於mysql的 主鍵概念。

比如我們用下面數據創建一個 Series

image

他就會產生下面數據格式的數據存儲:

image

這里可以看到,系統自動增加了2個字段: time 和 sequence_number 。

接口協議

InfluxDB 支持兩種api方式:

  • HTTP API ,已經提供
  • Protobuf API, 計划提供

如何使用 http api 進行操作?

比如對於foo_production這個數據庫,插入一系列數據,可以發現POST 請求到 /db/foo_production/series?u=some_user&p=some_password, 數據放到body里。

數據看起來是這樣的:

下面的"name": "events", 其中"events"就是一個series,類似關系型數據庫的表table

[
  {
    "name": "events",
    "columns": ["state", "email", "type"],
    "points": [
      ["ny", "paul@influxdb.org", "follow"],
      ["ny", "todd@influxdb.org", "open"]
    ]
  },
  {
    "name": "errors",
    "columns": ["class", "file", "user", "severity"],
    "points": [
      ["DivideByZero", "example.py", "someguy@influxdb.org", "fatal"]
    ]
  }
]

格式是json,可以在一個POST請求發送多個 series, 每個 series 里的 points 可以是多個,但索引要和columns對應。

上面的數據里沒有包含time 列,InfluxDB會自己加上,不過也可以指定time,比如:

[
  {
    "name": "response_times",
    "columns": ["time", "value"],
    "points": [
      [1382819388, 234.3],
      [1382819389, 120.1],
      [1382819380, 340.9]
    ]
  }
]

time 在InfluxDB里是很重要的,畢竟InfluxDB是time series database
在InfluxDB里還有個sequence_number字段是數據庫維護的,類似於mysql的 主鍵概念

當然 sequence_number 也是可以指定的,類似如下:

[
  {
    "name": "log_lines",
    "columns": ["time", "sequence_number", "line"],
    "points": [
      [1400425947368, 1, "this line is first"],
      [1400425947368, 2, "and this is second"]
    ]
  }
]
http://influxdb.com/docs/v0.8/api/reading_and_writing_data.html
 

InfluxDB 增刪更查都是用http api來完成,甚至支持使用正則表達式刪除數據,還有計划任務。

比如:

發送POST請求到 /db/:name/scheduled_deletes, body如下,

{
  "regex": "stats\..*",
  "olderThan": "14d",
  "runAt": 3
}

這個查詢會刪除大於14天的數據,並且任何以stats開頭的數據,並且每天3:00 AM運行。

 

參考資料:

InfluxDB 開源分布式時序、事件和指標數據庫
http://segmentfault.com/blog/lds/1190000000444617

開源監控利器grafana
http://www.cnblogs.com/txwsqk/p/3974915.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM