時序數據庫 InfluxDB(一)

時序數據庫 InfluxDB(一)

數據庫種類有很多,比如傳統的關系型數據庫 RDBMS( 如 MySQL ),NoSQL 數據庫( 如 MongoDB ),Key-Value 類型( 如 redis ),Wide column 類型( 如 HBase )等等等等,當然還有本系列文章將會介紹的時序數據庫 TSDB( 如 InfluxDB )。


時序數據庫 TSDB

不同的數據庫針對的應用場景有不同的偏重。TSDB( time series database )時序數據庫是專門以時間維度進行設計和優化的。
TSDB 通常具有以下的特點:

  • 時間是不可或缺的絕對主角(就像 MySQL 中的主鍵一樣),數據按照時間順序組織管理
  • 高并發高吞吐量的數據寫入
  • 數據的更新很少發生
  • 過期的數據可以批量刪除

InfluxDB 就是一款非常優秀的時序數據庫,高居 DB-Engines TSDB rank 榜首。

InfluxDB 分為免費的社區開源版本,以及需要收費的閉源商業版本,目前只有商業版本支持集群。

InfluxDB 的底層數據結構從 LSM 樹到 B+ 樹折騰了一通,最后自創了一個 TSM 樹( Time-Structured Merge Tree ),這也是它性能高且資源占用少的重要原因。

InfluxDB 由 go 語言編寫而成,沒有額外的依賴,它的查詢語言 InfluxQL 與 SQL 極其相似,使用特別簡單。


InfluxDB 基本概念

InfluxDB 有以下幾個核心概念:
1、database :
數據庫。

2、measurement
類似于表。

3、retention policy( 簡稱 RP )
保留策略,由以下三個部分構成:

  • DURATION:數據的保留時長。
  • REPLICATION:集群模式下數據的副本數,單節點無效。
  • SHARD DURATION:可選項,shard group 劃分的時間范圍。

4、timestamp
時間戳,就像是所有數據的主鍵一樣。

5、tag
tag key = tag value 鍵值對存儲具體的數據,會構建索引有利于查詢。tag set 就是 tag key-value 鍵值對的不同組合。

6、field
field key = field value 鍵值對也是存儲具體的數據,但不會被索引。類似的 field set 就是 field key-value 的組合。

7、series
一個 series 序列是由同一個 RP 策略下的同一個 measurement 里的同一個 tag set 構成的數據集合。

8、point
一個 point 點代表了一條數據,由 measurement、tag set、field set、timestamp 組成。一個 series 上的某個 timestamp 時間對應唯一一個 point 。

Line protocol 行協議

行協議指定了寫入數據的格式:

<measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

符號 [] 代表可選項,符號 … 代表可以有多個,符號 ,用來分隔相同 tag 或者 field 下的多個數據,符號空格分隔 tag、field、timestamp 。

示例:
在這里插入圖片描述

怎么去理解 series 和 point ?先看下圖:
在這里插入圖片描述

這張圖選取了三種時序數據庫的歷年排名得分情況。首先,整個圖表可以看成是一個 measurement ,它包含了許多數據;然后我們根據 db 名稱構建 tag ,把 score 排名得分作為 field ,那么所有數據行就類似于:

measurement,db=InfluxDB score=5 timestamp
measurement,db=Kdb+ score=1 timestamp
measurement,db=Prometheus score=0.2 timestamp
...

上文說過 tag set 就是 tag key = tag value 的不同組合,因此這里的 tag set 有以下三種:

db=InfluxDB
db=Kdb+
db=Prometheus

三個 tag set 構成了三個 series ,每個 series 就可以看成是圖中的一條線(一個維度),而每個 point 點就是 series 上具體某個 timestamp 對應的點。


與傳統數據庫的不同

InfluxDB 就是被設計用于處理時間序列的數據。傳統SQL數據庫雖然也可以處理時間序列數據,但并不是專門以此為目標的。InfluxDB 可以更加高效快速的存儲大量時間序列數據并對這些數據進行實時分析。

在 InfluxDB 中,時間是絕對的主角,就像是SQL數據庫中的主鍵一樣,如果你不指定則會默認為系統當前時間,時間必須是 UNIX epoch ( GMT ) 或者 RFC3339 格式。

InfluxDB 不需要預先定義好數據的結構,你可以隨時改變你的數據結構。InfluxDB 支持 continuous queries(連續查詢,就是以時間劃分范圍自動定期執行某個查詢)和 retention policies(保留策略)。InfluxDB 不支持跨 measurement 的 JOIN 查詢。

InfluxDB 中的查詢語言叫 InfluxQL ,語法與 SQL 極其相似,就是 select from where 那一套。

InfluxDB 并不是 CRUD,更像是 CR-ud ,意思就是更新和刪除數據跟傳統SQL數據庫明顯不一樣:

  • 更新某個 point 數據,只需向原來的 measurement,tag set,timestamp 重寫數據即可。
  • 你可以刪除 series ,但是不能基于 field 值去刪除獨立的 points ,解決方法是,你需要先查詢 field 值的時間戳,然后根據時間戳去刪除。
  • 無法更新或重命名 tags ,因為 tags 會構建索引,你只能創建新的 tags 并導入數據然后刪除老的。
  • 無法通過 tag key 或者 tag value 去刪除 tags 。

設計與權衡之道

InfluxDB 為了更高的性能做了一些設計與權衡之道:
1、對于時間序列用例,即使相同的數據被發送多次也會被認為是同一筆數據。

  • 優點:簡化了沖突,提高了寫入性能。
  • 缺點:不能存儲重復數據,可能會在極少數情況下覆蓋數據。

2、刪除是罕見的,當它們發生時肯定是針對大量的舊數據。

  • 優點:提高了讀寫性能。
  • 缺點:刪除功能受到了很大限制。

3、更新是罕見的,持續或者大批量的更新不會發生。時間序列的數據主要是永遠也不會更新的新數據。

  • 優點:提高了讀寫性能。
  • 缺點:更新功能受到了很大限制。

4、絕大多數寫入都是接近當前時間戳的數據,并且是按時間遞增順序添加。

  • 優點:按時間遞增的順序寫入數據更高效。
  • 缺點:隨機時間寫入的性能要低很多。

5、數據規模至關重要,數據庫必須能夠處理大量的讀寫。

  • 優點:數據庫可以處理大批量數據的讀寫。
  • 缺點:被迫做出的一些權衡去提高性能。

6、能夠寫入和查詢數據比具有強一致性更重要。

  • 優點:多個客戶端可以在高負載的情況下完成查詢和寫入操作。
  • 缺點:如果負載過高,查詢結果可能不包含最近的點。

7、許多時間序列都是短暫的。時間序列可能只有幾個小時然后就沒了,比如一臺新的主機開機,監控數據寫入一段時間,然后關機了。

  • 優點:InfluxDB 善于管理不連續的數據。
  • 缺點:無模式設計意味著不支持某些數據庫功能,例如沒有 join 交叉表連接。

8、No one point is too important 。

  • 優點:InfluxDB 具有非常強大的工具去處理聚合數據和大數據集。
  • 缺點:Points 數據點沒有傳統意義上的 ID ,它們被時間戳和 series 區分。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73786.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

E5071C數據保存教程:SNP文件/CSV導出+遠程傳輸步驟一鍵收藏

Keysight E5071C 網絡分析儀支持多種數據存儲方式&#xff0c;以下是詳細的操作步驟和注意事項&#xff1a; 1. 內部存儲&#xff08;儀器內存&#xff09; 保存測量數據&#xff1a; 軌跡數據&#xff1a;按 Save/Recall → Save Trace Data → 選擇存儲格式&#xff08;如 …

業務相關

目錄 一、Spark 1.spark主要用來計算什么&#xff1f; 隨便說段代碼 2.spark 運行命令說一個&#xff0c;平常用哪些參數&#xff0c;怎么考慮的 3.spark shuffle的代碼有哪些&#xff0c;平日哪些操作涉及到shuffle了 4.計算中遇到最難解決的是什么&#xff1f; 5.Spark …

LLM之RAG實戰(五十二)| 如何使用混合搜索優化RAG 檢索

在RAG項目中&#xff0c;大模型生成的參考內容&#xff08;專業術語稱為塊&#xff09;來自前一步的檢索&#xff0c;檢索的內容在很大程度上直接決定了生成的效果&#xff0c;因此檢索對于RAG項目至關重要&#xff0c;最常用的檢索方法是關鍵字搜索和語義搜索。本文將分別介紹…

[學成在線]07-視頻轉碼

視頻轉碼 視頻上傳成功后需要對視頻進行轉碼處理。 首先我們要分清文件格式和編碼格式&#xff1a; 文件格式&#xff1a;是指.mp4、.avi、.rmvb等這些不同擴展名的視頻文件的文件格式 &#xff0c;視頻文件的內容主要包括視頻和音頻&#xff0c;其文件格式是按照一定的編碼…

Leetcode算法方法總結

1. 雙指針法解決鏈表/數組題目 只要數組有序&#xff0c;就要想到雙指針做法。還有二分法 回文串一般也會用到雙指針&#xff0c;回文串的長度由于可能是奇數也可能是偶數&#xff0c;所以在尋找時&#xff0c;既需要尋找奇數長度的回文串&#xff0c;也需要尋找偶數長度的回文…

一周掌握Flutter開發--9. 與原生交互(上)

文章目錄 9. 與原生交互核心場景9.1 調用平臺功能&#xff1a;MethodChannel9.1.1 Flutter 端實現9.1.2 Android 端實現9.1.3 iOS 端實現9.1.4 使用場景 9.2 使用社區插件9.2.1 常用插件9.2.2 插件的優勢 總結 9. 與原生交互 Flutter 提供了強大的跨平臺開發能力&#xff0c;但…

基于Flask的通用登錄注冊模塊,并代理跳轉到目標網址

實現了用戶密碼的加密&#xff0c;代理跳轉到目標網址&#xff0c;不會暴露目標路徑&#xff0c;未登錄的情況下訪問proxy則自動跳轉到登錄頁&#xff0c;使用時需要修改配置項config&#xff0c;登錄注冊頁面背景快速修改&#xff0c;可以實現登錄注冊模塊的快速復用。 1.app…

Java課程設計(雙人對戰游戲)持續更新......

少廢話&#xff0c;當然借助了ai&#xff0c;就這么個實力&#xff0c;后續會逐漸完善...... 考慮添加以下功能&#xff1a; 選將&#xff0c;選圖&#xff0c;技能&#xff0c;天賦&#xff0c;道具&#xff0c;防反&#xff0c;反重力&#xff0c;物理反彈&#xff0c;擊落…

Ai工作流工具有那些如Dify、coze扣子等以及他們是否開源

Dify &#xff08;https://difycloud.com/&#xff09; 核心定位&#xff1a;專業級 LLM 應用開發平臺&#xff0c;支持復雜 AI 工作流構建與企業級管理。典型場景&#xff1a;企業智能客服、數據分析系統、復雜自動化流程構建等。適合需要深度定制、企業級管理和復雜 AI 邏輯…

Debezium系列之:使用Debezium和Apache Iceberg構建數據湖

Debezium系列之:使用Debezium和Apache Iceberg構建數據湖 Debezium Server Iceberg“Debezium Server Iceberg” 消費者設置數據復制Upsert 模式保留已刪除的記錄使用Upsert模式追加模式優化批處理大小在數據分析的世界中,數據湖是存儲和管理大量數據以滿足數據分析、報告或機…

docker run -p 5000:5000 my-flask-app

docker run -p 5000:5000 my-flask-app代碼的意思是&#xff1a; 運行 my-flask-app 容器&#xff0c;并把 Flask 服務器的 5000 端口映射到本機的 5000 端口。 拆解解釋 docker run -p 5000:5000 my-flask-app? docker run → 運行一個 Docker 容器 ? -p 5000:5000 → 端口…

高光譜工業相機+LED光源系統助力材料分類和異物檢測、實現高速在線檢測

檢測光源包括可見光&#xff0c;如紅光、藍光和綠光以及其他波長的光&#xff0c;如紫外和紅外波長&#xff0c;可以選擇與檢測對象物相應的波長。但由于能夠照射的波長較窄&#xff0c;例如受到同色異物混入或多個素材的材質分類等&#xff0c;可能需要使用可照射多種波長的光…

Spring 攔截器(Interceptor)與過濾器(Filter)對比

Spring 攔截器&#xff08;Interceptor&#xff09;與過濾器&#xff08;Filter&#xff09;對比 核心對比表格 對比維度攔截器&#xff08;Interceptor&#xff09;過濾器&#xff08;Filter&#xff09;定義Spring MVC 提供的組件&#xff0c;集成于 Spring 處理器鏈。Servl…

VulnHub-FALL通關攻略

第一步&#xff1a;確定靶機IP為192.168.40.129 第二步&#xff1a;掃描后臺及開放端口 #開放端口 22 --- ssh 25 --- SMTP簡單郵件傳輸協議 80 --- HTTP萬維網傳輸信息協議 110 --- POP3郵件協議3 139 --- NetBIOS服務 443 --- https服務 445 --- SMB協議 3306 --- Mysql 808…

Qt 線程和 QObjects

線程和 QObjects QThread 繼承于 QObject。 它發出信號來指示線程開始或結束執行&#xff0c;并提供一些插槽。 更有趣的是&#xff0c;QObjects 可以在多個線程中使用&#xff0c;發出信號以調用其他線程中的插槽&#xff0c;并向 "生活 "在其他線程中的對象發布事件…

華為、浪潮、華三鏈路聚合概述

1、華為 鏈路聚合可以提高鏈路帶寬和鏈路冗余性。有三種類型&#xff0c;分別是手工鏈路聚合&#xff0c;靜態lacp鏈路聚合&#xff0c;動態lacp鏈路聚合。 手工鏈路模式&#xff1a;也稱負載分擔模式&#xff0c;需手動指定鏈路&#xff0c;各鏈路之間平均分擔流量。靜態LAC…

HarmonyOS NEXT 鴻蒙中關系型數據庫@ohos.data.relationalStore API 9+

核心API ohos.data.relationalStore API 9 數據庫 數據庫是存儲和管理數據的系統 數據庫&#xff08;Database&#xff09;是一個以特定方式組織、存儲和管理數據的集合&#xff0c;通常用于支持各種應用程序和系統的運行。它不僅是存放數據的倉庫&#xff0c;還通過一定的…

步進電機 cia402協議 報文自己的理解 (筆記)

1. cai402 協議是什么 CiA 402 協議&#xff08;CAN in Automation 402&#xff09;&#xff0c;它是工業自動化領域中的一種通信協議&#xff0c;主要用于運動控制&#xff08;如伺服驅動器、步進電機等&#xff09;&#xff08; &#xff09;所屬標準 CiA 402 是 CANopen 應用…

鴻蒙攝像機,一場智能安防的“平權革命”

2025的春天&#xff0c;全國各行各業都感受到了普惠AI的魅力。大模型帶來的技術平權&#xff0c;讓每一個人都能輕松用上AI。 這時候&#xff0c;企業想知道&#xff0c;每時每刻離不開的攝像機&#xff0c;究竟什么時候才能迎來智能技術的平權與普惠。 博思數據研究中心的一份…

解決HuggingFaceEmbeddings模型加載報錯:缺少sentence-transformers依賴包

遇到報錯 報錯信息: Error loading model: Could not import sentence_transformers python package. Please install it with pip install sentence-transformers. 裝包信息&#xff1a; pip install modelscope langchain sentence_transformers langchain-huggingface on…