六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

數(shù)據(jù)模型對(duì)比之 InfluxDB vs TDengine

數(shù)據(jù)模型對(duì)比之 InfluxDB vs TDengine

在學(xué)習(xí)關(guān)系數(shù)據(jù)庫的時(shí)候,很多教材都會(huì)提供一些經(jīng)典的例子,比如如何為學(xué)生建表,管理他們學(xué)習(xí)的科目、成績(jī)、綜合表現(xiàn)等,先從邏輯上分解定義庫、表,同時(shí)通過主鍵外鍵構(gòu)建起表與表之間的關(guān)系,然后轉(zhuǎn)換成具體的 SQL 語句,最后通過各類關(guān)系運(yùn)算實(shí)現(xiàn)數(shù)據(jù)的增刪改查。

但是在使用時(shí)序數(shù)據(jù)庫(Time Series Database,TSDB)的時(shí)候,我們首先要面對(duì)的一個(gè)問題就是如何建立數(shù)據(jù)模型(Data Model),也就是如何將業(yè)務(wù)邏輯中的實(shí)體數(shù)據(jù)具體映射到所選的時(shí)序庫。

而且出于對(duì)讀寫性能、壓縮效率等目標(biāo)的權(quán)衡,不同的時(shí)序數(shù)據(jù)庫產(chǎn)品有可能會(huì)選擇不同的模型,這時(shí)候就要仔細(xì)分析了。本文將以 InfluxDB 和 TDengine 為例,對(duì)比學(xué)習(xí)一下它們的數(shù)據(jù)模型。

概述

InfluxDB 針對(duì)現(xiàn)實(shí)世界的測(cè)量值選擇了 bucket、measurement 這兩個(gè)核心概念,沒有關(guān)系數(shù)據(jù)庫里的 database、table 等概念;而 TDengine 選擇了兼容 SQL、降低門檻的路線,也就繼承了 database、table 等概念,同時(shí)創(chuàng)新性地提出了“一個(gè)數(shù)據(jù)采集點(diǎn)一張表”的數(shù)據(jù)模型。

InfluxDB 的數(shù)據(jù)模型

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

InfluxDB 數(shù)據(jù)模型將時(shí)序數(shù)據(jù)組織為 bucket 和 measurement。一個(gè) bucket 可以包含多個(gè) measurement。measurement 可以包含多個(gè)標(biāo)簽和字段。

可以將 bucket 理解為存儲(chǔ)時(shí)序數(shù)據(jù)的位置,我們可以為其指定時(shí)序數(shù)據(jù)的保存策略。measurement 則用于時(shí)序數(shù)據(jù)的邏輯分組。從邏輯意義上對(duì)比,我們可以把 bucket 看作關(guān)系數(shù)據(jù)庫中的 database,把 measurement 看作 table。

measurement 又包括幾個(gè)部分:

  • 標(biāo)簽(tag):其值不經(jīng)常改變的鍵值對(duì)。用來保存一些相對(duì)靜態(tài)的信息,比如采集設(shè)備的主機(jī)、位置、站點(diǎn)等。
  • 字段(field):其值隨著時(shí)間經(jīng)常改變的鍵值對(duì),比如溫度、壓強(qiáng)、股價(jià)等。
  • 時(shí)間戳(timestamp):與當(dāng)前數(shù)據(jù)關(guān)聯(lián)的時(shí)間戳。

在此基礎(chǔ)上,InfluxDB 又有兩個(gè)新的概念,point(數(shù)據(jù)點(diǎn))和時(shí)間線(series),當(dāng)然這在很多時(shí)序數(shù)據(jù)庫中都是類似的。

整體來看,InfluxDB 的數(shù)據(jù)模型比較直觀,而且不需要提前定義好模式,容易上手,后期如果有需要,動(dòng)態(tài)增加新的字段也比較容易。當(dāng)然,考慮后續(xù)的查詢性能,在數(shù)據(jù)量非常大的情況下,也需要仔細(xì)設(shè)計(jì) measurement 中的 tag 和 field,在此就不做贅述。新用戶可以直接使用 InfluxDB 的圖形界面或命令行客戶端來創(chuàng)建 bucket,然后就可以利用行協(xié)議寫入數(shù)據(jù)了。就像這樣:

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
"

在查詢方面,InfluxDB 提供了類 SQL 的 InfluxQL 語言,后來又推出了函數(shù)式的腳本語言 Flux。需要一定的學(xué)習(xí)成本。

TDengine 的數(shù)據(jù)模型

TDengine 充分利用了時(shí)序數(shù)據(jù)的特點(diǎn),提出了“一個(gè)數(shù)據(jù)采集點(diǎn)一張表”與“超級(jí)表”的概念,設(shè)計(jì)了創(chuàng)新的存儲(chǔ)引擎,讓數(shù)據(jù)的寫入、查詢和存儲(chǔ)效率都得到極大的提升。

首先,TDengine 為了讓有數(shù)據(jù)庫經(jīng)驗(yàn)的從業(yè)者快速上手,直接選擇了以 SQL 為接口語言的設(shè)計(jì)策略。所謂“一個(gè)數(shù)據(jù)采集點(diǎn)一張表”,就是在設(shè)計(jì)數(shù)據(jù)模型時(shí),要對(duì)每個(gè)數(shù)據(jù)采集點(diǎn)單獨(dú)建一張表,用來存儲(chǔ)這個(gè)數(shù)據(jù)采集點(diǎn)所采集的時(shí)序數(shù)據(jù)。這種設(shè)計(jì)有幾大優(yōu)點(diǎn):

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

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

所以在使用 TDengine 時(shí),我們要先創(chuàng)建庫(database),再創(chuàng)建超級(jí)表,然后為具體的數(shù)據(jù)采集點(diǎn)創(chuàng)建子表。從創(chuàng)建到管理數(shù)據(jù),都可用自己熟悉的 SQL 語法。TDengine 3.0 新增的流式計(jì)算語法,也是直接擴(kuò)充了 SQL,很容易上手。

當(dāng)然,硬幣總有兩面。TDengine 為了性能選擇了這樣的設(shè)計(jì),但是像 InfluxDB 的無模式操作,實(shí)現(xiàn)起來就要復(fù)雜一些。不過 TDengine 也通過內(nèi)部功能提供了無模式寫入功能。

本文簡(jiǎn)單對(duì)比了 InfluxDB 和 TDengine 的數(shù)據(jù)模型。總結(jié)而言,如果沒有數(shù)據(jù)庫相關(guān)背景,InfluxDB 上手比較直觀;如果有 SQL 經(jīng)驗(yàn),甚至在業(yè)務(wù)中已經(jīng)用 MySQL 等關(guān)系數(shù)據(jù)庫處理過時(shí)序數(shù)據(jù),則 TDengine 更為友好。

更多時(shí)序數(shù)據(jù)庫知識(shí)點(diǎn)