无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

數據模型對比之 InfluxDB vs TDengine

數據模型對比之 InfluxDB vs TDengine

在學(xue)習關系(xi)數據庫(ku)(ku)的時候,很多教材(cai)都(dou)會(hui)提供一(yi)些經典的例子,比如如何為學(xue)生(sheng)建表(biao),管理他們(men)學(xue)習的科目、成績(ji)、綜合表(biao)現等,先從邏輯上分解定義庫(ku)(ku)、表(biao),同時通過主鍵(jian)外鍵(jian)構建起表(biao)與表(biao)之(zhi)間的關系(xi),然后(hou)轉(zhuan)換成具體的 SQL 語(yu)句,最(zui)后(hou)通過各類關系(xi)運算實現數據的增刪改查(cha)。

但是在使用時序數據庫(Time Series Database,TSDB)的(de)時(shi)候,我們首先要(yao)面對的(de)一個問題就(jiu)是(shi)如何(he)建立數(shu)據(ju)模(mo)型(xing)(Data Model),也就(jiu)是(shi)如何(he)將業務邏(luo)輯中的(de)實體數(shu)據(ju)具體映射(she)到所選的(de)時(shi)序(xu)庫。

而且出于對(dui)讀寫性能(neng)、壓縮效率等目標的(de)權衡,不同的(de)時序數(shu)據庫產品(pin)有可能(neng)會選(xuan)擇不同的(de)模型,這(zhe)時候就要仔細分析(xi)了(le)。本文將(jiang)以(yi) InfluxDB 和 TDengine 為例,對(dui)比學習一下它們(men)的(de)數(shu)據模型。

概述

InfluxDB 針對現實世界的測(ce)量值(zhi)選擇了 bucket、measurement 這兩個核心(xin)概念,沒(mei)有關系數據(ju)庫(ku)里(li)的 database、table 等概念;而 TDengine 選擇了兼容 SQL、降低門檻的路線(xian),也(ye)就繼承(cheng)了 database、table 等概念,同時創(chuang)新性地提(ti)出了“一個數據(ju)采集點一張(zhang)表”的數據(ju)模型。

InfluxDB 的數據模型

我們先來看看 InfluxDB 中的核心概念。根據其官方文檔:

InfluxDB 數據模型將時序數據組織為 bucket 和(he) measurement。一個 bucket 可以(yi)(yi)包含(han)多個 measurement。measurement 可以(yi)(yi)包含(han)多個標簽和(he)字段。

可以(yi)將 bucket 理解為(wei)存(cun)儲時序(xu)數(shu)(shu)據(ju)(ju)(ju)的(de)位置(zhi),我們(men)可以(yi)為(wei)其指定(ding)時序(xu)數(shu)(shu)據(ju)(ju)(ju)的(de)保存(cun)策略(lve)。measurement 則用(yong)于時序(xu)數(shu)(shu)據(ju)(ju)(ju)的(de)邏(luo)輯(ji)分組。從邏(luo)輯(ji)意義上(shang)對比,我們(men)可以(yi)把(ba)(ba) bucket 看作(zuo)關系數(shu)(shu)據(ju)(ju)(ju)庫中的(de) database,把(ba)(ba) measurement 看作(zuo) table。

measurement 又(you)包(bao)括幾個(ge)部分:

  • 標簽(tag):其值不經常改變的鍵值對。用來保存一些相對靜態的信息,比如采集設備的主機、位置、站點等。
  • 字段(field):其值隨著時間經常改變的鍵值對,比如溫度、壓強、股價等。
  • 時間戳(timestamp):與當前數據關聯的時間戳。

在(zai)此基礎上(shang),InfluxDB 又有兩個新的(de)概(gai)念,point(數據(ju)點)和(he)時間線(series),當然(ran)這在(zai)很多時序數據(ju)庫中都(dou)是類(lei)似的(de)。

整體來看,InfluxDB 的(de)數據模型比較直(zhi)觀,而且不(bu)需要(yao)提前定(ding)義(yi)好模式,容(rong)易上手,后(hou)期如果有需要(yao),動態增加新(xin)的(de)字段也比較容(rong)易。當然(ran),考慮后(hou)續的(de)查詢(xun)性能(neng),在(zai)(zai)數據量非常大的(de)情況下,也需要(yao)仔細設計 measurement 中的(de) tag 和 field,在(zai)(zai)此就(jiu)不(bu)做(zuo)贅述。新(xin)用戶(hu)可(ke)以直(zhi)接(jie)使用 InfluxDB 的(de)圖形界(jie)面或命(ming)令行(xing)客戶(hu)端(duan)來創建(jian) bucket,然(ran)后(hou)就(jiu)可(ke)以利(li)用行(xing)協議寫入(ru)數據了。就(jiu)像(xiang)這樣(yang):

influx write \
  --bucket get-started \
  --precision s "
home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600
home,room=Living\ Room temp=21.8,hum=36.0,co=0i 1641031200
home,room=Kitchen temp=22.7,hum=36.1,co=0i 1641031200
home,room=Living\ Room temp=22.2,hum=36.0,co=0i 1641034800
"

在查(cha)詢方面,InfluxDB 提供了類 SQL 的 InfluxQL 語言,后(hou)來又(you)推出了函數式的腳本語言 Flux。需要一定的學習(xi)成本。

TDengine 的數據模型

TDengine 充(chong)分(fen)利用了時序(xu)數(shu)據(ju)的(de)特點(dian),提出了“一(yi)個數(shu)據(ju)采集點(dian)一(yi)張表(biao)”與“”的(de)概念,設計(ji)了創新(xin)的(de)存(cun)儲引擎,讓(rang)數(shu)據(ju)的(de)寫入、查(cha)詢和存(cun)儲效率都得到極大的(de)提升。

首(shou)先(xian),TDengine 為(wei)(wei)了讓有數據庫經驗的從業者快速上手,直接選擇了以 SQL 為(wei)(wei)接口語言的設(she)(she)計策(ce)略(lve)。所謂“一(yi)個數據采集(ji)點一(yi)張表”,就是在設(she)(she)計數據模(mo)型(xing)時(shi),要(yao)對每(mei)個數據采集(ji)點單獨建一(yi)張表,用(yong)來存儲這(zhe)個數據采集(ji)點所采集(ji)的時(shi)序數據。這(zhe)種設(she)(she)計有幾大優點:

  1. 由于不同數據采集點產生數據的過程完全獨立,每個數據采集點的數據源是唯一的,一張表也就只有一個寫入者,這樣就可采用無鎖方式來寫,寫入速度就能大幅提升。
  2. 對于一個數據采集點而言,其產生的數據是按照時間排序的,因此寫的操作可用追加的方式實現,進一步大幅提高數據寫入速度。
  3. 一個數據采集點的數據是以塊為單位連續存儲的。如果讀取一個時間段的數據,它能大幅減少隨機讀取操作,成數量級的提升讀取和查詢速度。
  4. 一個數據塊內部,采用列式存儲,對于不同數據類型,采用不同壓縮算法,而且由于一個數據采集點的采集量的變化是緩慢的,壓縮率更高

由于一個數據采集點一張表,導致表的數量巨增,難以管理,而且應用經常需要做采集點之間的聚合操作,聚合的操作也變得復雜起來。為解決這個問題,TDengine 引入了超級表(Super Table,簡稱為 STable)的概念。在 TDengine 的設計里,表用來代表一個具體的數據采集點,超級表用來代表一組相同類型的數據采集點集合

所(suo)以在使用 TDengine 時(shi),我(wo)們(men)要先(xian)創建(jian)庫(database),再創建(jian)超(chao)級表(biao),然后為具體的(de)數據采(cai)集點創建(jian)子表(biao)。從創建(jian)到管(guan)理(li)數據,都可用自(zi)己熟悉的(de) SQL 語法。TDengine 3.0 新增(zeng)的(de)流式(shi)計算(suan)語法,也是直接擴充了 SQL,很容易上手。

當然,硬幣總有兩面。TDengine 為(wei)了性(xing)能(neng)選擇了這樣(yang)的設(she)計,但是像 InfluxDB 的無模式(shi)操作,實現起來就要復雜一些。不過 TDengine 也(ye)通過內部功(gong)(gong)能(neng)提供了無模式(shi)寫入功(gong)(gong)能(neng)。

本文簡單對比了 InfluxDB 和 TDengine 的數據(ju)模型。總(zong)結(jie)而言,如果(guo)沒有數據(ju)庫相關背景,InfluxDB 上手比較直(zhi)觀;如果(guo)有 SQL 經驗(yan),甚至在業務中(zhong)已經用 MySQL 等關系數據(ju)庫處理(li)過時(shi)序數據(ju),則 TDengine 更為(wei)友好。

更多時序數據庫知識點