1. 程式人生 > >InfluxDB學習-01介紹/基本操作

InfluxDB學習-01介紹/基本操作

1.概念: 

InfluxDB是一個時間序列資料庫,旨在處理高寫入和查詢負載。它是TICK堆疊的組成部分 。InfluxDB旨在用作涉及大量帶時間戳資料的任何用例的後備儲存,包括DevOps監控,應用程式指標,物聯網感測器資料和實時分析。

2.主要特點:

      1.專為時間序列資料編寫的自定義高效能資料儲存。TSM引擎允許高攝取速度和資料壓縮

      2.完全寫在Go。它編譯成單個二進位制檔案,沒有外部依賴項。

      3.簡單,高效能的寫入和查詢HTTP API。

     4.外掛支援其他資料提取協議,如Graphite,collectd和OpenTSDB。

     5.專為類似SQL的查詢語言量身定製,可輕鬆查詢聚合資料。

     6.標籤允許對系列進行索引以實現快速有效的查詢。

     7. 保留策略有效地自動使過時資料過期。

     8.連續查詢自動計算聚合資料,以提高頻繁查詢的效率。

3.優點:

    時間序列資料庫在海量資料的讀取和寫出都比關係型資料庫和NoSql快很多,有人做過mysql和influxDB對比,儲存1000萬條資料mysql要7分多鐘,influxDB只需2分多鐘,從1000萬條資料讀10000條所需資料mysql要6秒多,influxDB只需0.22秒多.

  用作涉及大量帶時間戳資料的任何用例的後備儲存.效率高。讀寫速度快。

4.安裝下載

https://portal.influxdata.com/downloads#influxdb

5.influxDB資料庫常用命令:

    1、顯示所有資料庫:show databases
    2、建立資料庫: create database test 刪除資料庫: drop database test
    3、使用某個資料庫:use test
    4、顯示所有表:show measurements
    5、新建表和插入資料 :新建表沒有具體的語法,只是增加第一條資料時,會自動建立表

insert results,hostname=index1 value=1

關鍵詞語說明:

   1)database--資料庫,這個同傳統資料庫的資料庫概念。

   2)measurement--資料表,在InfluxDB中,measurement即為表的作用,同傳統資料庫中的table作用一致。
二、InfluxDB特有概念
   1)tag--標籤,在InfluxDB中,tag是一個非常重要的部分,表名+tag一起作為資料庫的索引,是“key-value”的形式。

   2)field--資料,field主要是用來存放資料的部分,也是“key-value”的形式。

   3)timestamp--時間戳,作為時序型資料庫,時間戳是InfluxDB中最重要的部分,在插入資料時可以自己指定也可留空讓系統指定。

  說明:在插入新資料時,tag、field和timestamp之間用空格分隔。

   4)series--序列,所有在資料庫中的資料,都需要通過圖表來展示,而這個series表示這個表裡面的資料,可以在圖表上畫成
幾條線。

   5)Retention policy--資料保留策略,可以定義資料保留的時長,每個資料庫可以有多個數據保留策略,
但只能有一個預設策略。。
 
  6)Point--點,表示每個表裡某個時刻的某個條件下的一個field的資料,因為體現在圖表上就是一個點,
於是將其稱為point。
  7.GROUP BY 引數只能是time和tag)
    如:SELECT mean("water_level") FROM "h2o_feet" WHERE time >= '2018-11-17T23:48:00Z' AND time <= '2018-11-18T00:30:00Z' GROUP BY time(10m),* fill(200) LIMIT 7 SLIMIT 1 SOFFSET 1
 
    GROUP BY time(10m)則表示以10分鐘分組,起始時間為包含這個區間的第一個10m的時間,即 2018-11-17T23:40:00Z。預設返回的是第一個series,如果要計算另外那個series,可以在SQL語句後面加上 SOFFSET 1。

    fill(200)表示如果這個時間段沒有資料,以200填充。mean(field_key)求該範圍內資料的平均值(注意:這是依據series來計算。其他還有SUM求和,MEDIAN求中位數)。LIMIT 7表示限制返回的point(記錄數)最多為7條,而SLIMIT 1則是限制返回的series為1個.
    那如果時間小於資料本身採集的時間間隔呢,比如GROUP BY time(10s) 這樣的話,就會按10s取一個點,沒有數值的為空或者FILL填充,對應時間點有資料則保持不變。

    6.設定一下時間顯示格式:precision rfc3339

    7、查詢資料 表名有點號時,輸入雙引號

    8、使用者管理

          a.顯示所有使用者: show users

          b.新增使用者:

             --普通使用者 create user "user" with password 'user'
             --管理員使用者 create user "admin" with password 'admin' with all privileges

         c.刪除使用者:drop user "user"

        

       

       修改和刪除資料

       InfluxDB屬於時序資料庫,沒有提供修改和刪除資料的方法。

      但是刪除可以通過InfluxDB的資料儲存策略(Retention Policies)來實現

      9.series操作

          series表示這個表裡面的資料,可以在圖表上畫成幾條線,series主要通過tags排列組合算出來。

  show series from test;

6.InfluxDB的HTTP API:使用curl這個工具來模擬HTTP 請求:

  • 1)建立資料庫 
    curl -POST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mytest" 建立一個名為mydb的資料庫。
  • 2)刪除資料庫
    curl -POST http://localhost:8086/query --data-urlencode "q=DROP DATABASE mytest" 
  • 新增資料 

    curl -i -XPOST 'http://localhost:8086/write?db=mytest' --data-binary 'cpu_short,host=server01,region=us-west value=0.64 1s's055562000000000' 

    說明:db=mytest是指使用mydb這個資料庫。

    --data-binary後面是需插入資料。

    cpu_short是表名(measurement),tag欄位是host和region,值分別為:server01和us-west。

    field key欄位是value,值為0.64。

    時間戳(timestamp)指定為1434055562000000000。

    這樣,就向mytest資料庫的cpu_short表中插入了一條資料。

    其中,db引數必須指定一個數據庫中已經存在的資料庫名,資料體的格式遵從InfluxDB規定格式,首先是表名,後面是tags,然後是field,最後是時間戳。tags、field和時間戳三者之間以空格相分隔。

  • 新增多條資料 

    curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_short,host=server02 value=0.67
    cpu_short,host=server02,region=us-west value=0.55 1422568543702900257
    cpu_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'

    這條語句向資料庫mytest的表cpu_short中插入了三條資料。

    第一條指定tag為host,值為server02,第二條指定tag為host和region,值分別為server02和us-west,第三條指定tag為direction,host,region,值分別為:in,server01,us-west。

  • HTTP API響應

    InfluxDB的響應主要有以下幾個:

    1)2xx:204代表no content,200代表InfluxDB可以接收請求但是沒有完成請求。一般會在body體中帶有出錯資訊。

    2)4xx:InfluxDB不能解析請求。

    3)5xx:系統出現錯誤。

7.資料保留策略:

  •  用來定義資料在InfluxDB中存放的時間,或者定義儲存某個期間的資料。
  • 一個數據庫可以有多個保留策略,但每個策略必須是獨一無二的。

 7.1 InfluxDB 資料保留策略 目的:

   InfluxDB本身不提供資料的刪除操作,因此用來控制資料量的方式就是定義資料保留策略。

   因此定義資料保留策略的目的是讓InfluxDB能夠知道可以丟棄哪些資料,從而更高效的處理資料

 7.2 資料保留策略 操作:

  • 1)查詢策略 -->SHOW RETENTION POLICIES ON telegraf

    

     test表只有一個策略,各欄位的含義如下:

    name--名稱,此示例名稱為 default

    duration--持續時間,0代表無限制

    shardGroupDuration--shardGroup的儲存時間,shardGroup是InfluxDB的一個基本儲存結構,應該大於這個時間的資料在查詢效率上應該有所降低。

   replicaN--全稱是REPLICATION,副本個數

  default--是否是預設策略

  • 2)新建策略 
    CREATE RETENTION POLICY "2_hours" ON "test" DURATION 2h REPLICATION 1 DEFAULT

   在 test庫添加了一個2小時的策略,名字叫做 2_hours, duration為2小時,副本為1,設定為預設策略。

   因為名為autogen的策略不再是預設策略,因此,在查詢使用autogen策略的表時要顯式的加上策略名 “autogen”。

  select * from "autogen".cpu limit 2 
  • 3)修改策略 
    ALTER RETENTION POLICY "autogen" ON "test" DURATION 0s DEFAULT 將策略 autogen 設定未default預設模式
  • 4)刪除策略 
    drop retention POLICY "2_hours" ON "test"

       

8、注意

     策略這個關鍵詞“POLICY”在使用是應該大寫,小寫應該會出錯。

    當一個表使用的策略不是預設策略時,在進行操作時一定要顯式的指定策略名稱,否則會出現錯誤。

9.InfluxDB連續查詢: 

        資料庫中自動定時啟動的一組語句,語句中必須包含 SELECT關鍵詞和GROUP BY time()。InfluxDB會將查詢結果放在指定的資料表中。相當於mysql儲存過程,函式,觸發器等

   9.1優點:

  • 最優的降低取樣率的方式,連續查詢和儲存策略搭配使用將會大大降低InfluxDB的系統佔用量。
  • 而且使用連續查詢後,資料會存放到指定的資料表中,這樣就為以後統計不同精度的資料提供了方便。

   9.2連續查詢 操作 -->使用者限制 管理員 

  • 1)新建連續查詢語法:
    CREATE CONTINUOUS QUERY <cq_name> ON <database_name> 
      [RESAMPLE [EVERY <interval>] [FOR <interval>]] 
      BEGIN 
        SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement> 
         FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>] 
      END  查詢部分包含在 BEGIN 和 END 之間。

     使用示例:

         CREATE CONTINUOUS QUERY query_30m ON test BEGIN SELECT mean(userid) INTO user_used_30m FROM mem GROUP BY time(30m) END

     在test 庫中新建了一個名為 query_30m 的連續查詢,每三十分鐘取一個userid欄位的平均值,加入 user_used_30m 表中。使用的資料保留策略都是 default。

  • 2)顯示所有已存在的連續查詢 
    SHOW CONTINUOUS QUERIES
  • 3)刪除Continuous Queries  -->
    DROP CONTINUOUS QUERY <cq_name> ON <database_name>

 9.3用處:

  •   在InfluxDB中,將連續查詢與資料儲存策略一起使用會達到最好的效果。

   比如,將精度高的表的儲存策略定為一個周,然後將精度底的表儲存策略定的時間久一點,這要就可以實現高低搭配,以滿足不同的工作需要。

相關推薦

InfluxDB學習-01介紹/基本操作

1.概念:  InfluxDB是一個時間序列資料庫,旨在處理高寫入和查詢負載。它是TICK堆疊的組成部分 。InfluxDB旨在用作涉及大量帶時間戳資料的任何用例的後備儲存,包括DevOps監控,應用程式指標,物聯網感測器資料和實時分析。 2.主要特點:       1

ansible介紹+基本操作

ansible1ansible介紹- Ansible基於Python語言實現,由paramiko和PyYAML兩個關鍵模塊構建- 不需要安裝客戶端,通過sshd去通信- 基於模塊工作,模塊可以由任何語言開發- 不僅支持命令行使用模塊,也支持編寫yaml格式的playbook,易於編寫和閱讀- 有提供UI(瀏覽

《 mongodb 學習 》之基本操作

pretty 就是 log style 操作 16px 如果 -s collect 一、創建數據庫和表 在bin目錄下 執行 mongo 進入mongodb 建庫 use demo1 創建數據庫,芒果語法裏,use 表示,如果當前有這個數據庫就會使用, 如果沒喲就創

TinkPHP框架學習-02控制器基本操作

ffffff 換行 lin type emp 定義 select cor 新建                   1-----創建控制器                   2-----訪問視圖頁面                   3-----註冊變量到視

MongoDB 學習-MongoDB 的基本操作

1 MongoDB 的簡介     MongoDB 是由C++編寫的NOSQL 非關係型資料庫,是非關係型資料庫中最像關係型資料庫的NoSQL 資料庫。 2 MongoDB 和 關係型資料庫對比   &n

Python學習之Git基本操作

版本庫建立 什麼是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄裡面的所有檔案都可以被Git管理起來,每個檔案的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。 所以,建立一個版本庫非常簡單,首先,選擇一個合適

少兒程式設計Scratch學習筆記6--基本操作(三)遊戲例子

前面兩篇我們介紹了Scratch的基本操作。當熟悉這個小軟體後,就會發問這個軟體最終可以做出什麼?對於小朋友來說,遊戲和動畫故事是非常有吸引力的。當然還可以做一些科普文章的展示,都是對小朋友很幫助的。本章我就來介紹下製作遊戲的基礎操作,為後期做遊戲進行下準備。在後面的文章中我

少兒程式設計Scratch學習筆記7--基本操作(四)故事例子

除了遊戲,Scratch還可以製作成動畫故事。本篇介紹下製作動畫故事的基本操作的例子。 1、角色交流(通過訊息,進行角色的交流) 首先建立兩個角色,用來展示對話。 選擇右側的小企鵝,選擇造型選擇卡,然後點選左右翻轉,另角色翻轉。 選擇左側的企鵝,新增一個說的外

ThinkPHP5學習(8)資料庫-基本操作

1.資料庫配置 2.query,execute原生態sql語句,增刪改查 3.引數繫結命名佔位符繫結 4.多個數據切換查詢操作 5.查詢構造器 6.DB鏈式操作 7.事務支援 ThinkPHP內建了抽象資料庫訪問層,把不同的資料庫操作封裝起來,我們只需要使用公共

mongodb學習(二)-mongodb基本操作

mongodb基本操作 @(mongodb) 基本操作 資料庫和表操作 show bds 檢視資料庫 use test 切換資料庫 db.dropDatabase() 刪除當前

孤荷淩寒自學python第六十二天學習mongoDB的基本操作並進行簡單封裝1

年齡 聯系 文檔 社區 查詢 直接 執行 lifo 時代 孤荷淩寒自學python第六十二天學習mongoDB的基本操作並進行簡單封裝1 (完整學習過程屏幕記錄視頻地址在文末) 今天是學習mongoDB數據庫的第八天。 今天開始學習mongoDB的簡單操作,並對一些

孤荷凌寒自學python第六十二天學習mongoDB的基本操作並進行簡單封裝1

孤荷凌寒自學python第六十二天學習mongoDB的基本操作並進行簡單封裝1   (完整學習過程螢幕記錄視訊地址在文末)   今天是學習mongoDB資料庫的第八天。 今天開始學習mongoDB的簡單操作,並對一些可能反覆經常使用的操作進行簡單的封裝。   今天成

少兒程式設計Scratch學習筆記4--基本操作(一)特效例子

為了知道Scrtach可以在我們今後的程式設計中提供哪些功能。接下來我們分幾篇介紹一些例子,熟悉Scratch的基本操作。 1、特效展示例子 首先建立一個角色,我選擇了一個紅色的蘋果 在外觀腳本里有很多可以更改外觀的選項卡,選擇一個更改顏色效果的選項卡放到右側

孤荷凌寒自學python第六十四天學習mongoDB的基本操作並進行簡單封裝3

孤荷凌寒自學python第六十四天學習mongoDB的基本操作並進行簡單封裝3   (完整學習過程螢幕記錄視訊地址在文末)   今天是學習mongoDB資料庫的第十天。 今天繼續學習mongoDB的簡單操作,並繼續對一些可能反覆經常使用的操作進行簡單的封裝。   今

孤荷凌寒自學python第六十五天學習mongoDB的基本操作並進行簡單封裝4

孤荷凌寒自學python第六十五天學習mongoDB的基本操作並進行簡單封裝4   (完整學習過程螢幕記錄視訊地址在文末)   今天是學習mongoDB資料庫的第十一天。 今天繼續學習mongoDB的簡單操作,並繼續對一些可能反覆經常使用的操作進行簡單的封裝。  

孤荷淩寒自學python第六十五天學習mongoDB的基本操作並進行簡單封裝4

姓名 ces pan try -- 理念 成功 語音 最終 孤荷淩寒自學python第六十五天學習mongoDB的基本操作並進行簡單封裝4 (完整學習過程屏幕記錄視頻地址在文末) 今天是學習mongoDB數據庫的第十一天。 今天繼續學習mongoDB的簡單操作,並繼

matlab學習GUI的基本操作

在命令列視窗輸入guide 單擊確定後出現,可以選擇控制元件來設計,然後可以儲存 右擊可以檢視控制元件的所有屬性 舉一個簡單的GUI例項---實現資料的傳輸 新增可編輯文字框 更改字型大小,string預設的刪掉  在按鈕“資料傳遞”上右擊,找到資料檢視--->

孤荷凌寒自學python第六十六天學習mongoDB的基本操作並進行簡單封裝5

孤荷凌寒自學python第六十六天學習mongoDB的基本操作並進行簡單封裝5並學習許可權設定 (完整學習過程螢幕記錄視訊地址在文末)   今天是學習mongoDB資料庫的第十二天。 今天繼續學習mongoDB的簡單操作,並繼續對一些可能反覆經常使用的操作進行簡單的封裝。同時通過搜尋瞭解瞭如

孤荷淩寒自學python第六十六天學習mongoDB的基本操作並進行簡單封裝5

isf 過程 文件 入門 大於等於 txt 行處理 記憶 實踐 孤荷淩寒自學python第六十六天學習mongoDB的基本操作並進行簡單封裝5並學習權限設置 (完整學習過程屏幕記錄視頻地址在文末) 今天是學習mongoDB數據庫的第十二天。 今天繼續學習mongoDB的

少兒程式設計Scratch學習筆記8--基本操作(五)聲音例子

在製作小程式的時候,我們還可以給程式新增聲音效果。 1、選擇樂器 在聲音選項卡中選擇演奏的樂器 之後選擇音符和節拍 點選開始就可以播放音樂了 2、播放背景音樂 選擇播放聲音 在選擇重複執行,這樣就可以一直播放音樂了 3、匯入音樂 在聲音選