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

時序數(shù)據(jù)庫數(shù)據(jù)建模實踐指南:從設(shè)計到實現(xiàn)的完整流程

Jing Wang

2026-04-17 /

數(shù)據(jù)建模是時序數(shù)據(jù)庫應(yīng)用開發(fā)的基礎(chǔ)環(huán)節(jié),合理的建模設(shè)計直接影響系統(tǒng)的性能和可維護性。本文將以智能電表為例,詳細介紹TDengine時序數(shù)據(jù)庫的數(shù)據(jù)建模實踐。

一、建模設(shè)計原則

1.1 核心設(shè)計理念

TDengine采用”一個數(shù)據(jù)采集點一張表”的設(shè)計理念,這一理念帶來以下優(yōu)勢:

  • 寫入性能最優(yōu):單表單寫入者,無鎖寫入
  • 查詢效率最高:數(shù)據(jù)連續(xù)存儲,減少隨機IO
  • 壓縮率最高:列式存儲,變化緩慢的數(shù)據(jù)壓縮率高

1.2 建模步驟

  1. 分析業(yè)務(wù)場景,識別數(shù)據(jù)采集點
  2. 確定采集量和標(biāo)簽
  3. 設(shè)計超級表結(jié)構(gòu)
  4. 創(chuàng)建數(shù)據(jù)庫
  5. 創(chuàng)建超級表和子表

二、創(chuàng)建數(shù)據(jù)庫

2.1 數(shù)據(jù)庫創(chuàng)建語法

CREATE DATABASE power PRECISION 'ms' KEEP 3650 DURATION 10 BUFFER 16;

2.2 參數(shù)詳解

參數(shù)說明示例值
PRECISION時間戳精度‘ms’(毫秒)
KEEP數(shù)據(jù)保留天數(shù)3650(約10年)
DURATION數(shù)據(jù)文件時間跨度10(天)
BUFFER寫入內(nèi)存池大小16(MB)

2.3 參數(shù)選擇建議

時間精度選擇

  • 毫秒(ms):適用于大多數(shù)物聯(lián)網(wǎng)場景
  • 微秒(us):適用于金融、高頻交易場景
  • 納秒(ns):適用于科學(xué)實驗、精密測量

數(shù)據(jù)保留策略

  • 根據(jù)業(yè)務(wù)需求和存儲容量確定
  • 歷史數(shù)據(jù)可定期歸檔
  • 冷熱數(shù)據(jù)分層存儲

2.4 切換數(shù)據(jù)庫

USE power;

執(zhí)行后,后續(xù)的插入、查詢等操作都在當(dāng)前的power數(shù)據(jù)庫中進行。

三、創(chuàng)建超級表

3.1 超級表創(chuàng)建語法

CREATE STABLE meters (
    ts timestamp, 
    current float, 
    voltage int, 
    phase float
) TAGS (
    location varchar(64), 
    group_id int
);

3.2 列定義規(guī)則

時間戳列

  • 第1列必須為時間戳列
  • 格式:列名 timestamp

采集量列

  • 從第2列開始定義
  • 數(shù)據(jù)類型可以是整型、浮點型、字符串等
  • 示例:current float、voltage int

標(biāo)簽列

  • 通過TAGS關(guān)鍵字定義
  • 數(shù)據(jù)類型可以是任意類型
  • 標(biāo)簽名不能與采集量列名相同

3.3 數(shù)據(jù)類型選擇

數(shù)據(jù)類型適用場景示例
TINYINT小范圍整數(shù)狀態(tài)碼
SMALLINT中等范圍整數(shù)溫度(整數(shù))
INT常規(guī)整數(shù)電壓值
BIGINT大整數(shù)設(shè)備ID
FLOAT單精度浮點電流值
DOUBLE雙精度浮點精確測量值
VARCHAR字符串位置信息
TIMESTAMP時間戳采集時間

四、創(chuàng)建子表

4.1 手動創(chuàng)建子表

CREATE TABLE d1001 
USING meters (
    location,
    group_id
) TAGS (
    "California.SanFrancisco", 
    2
);

參數(shù)說明:

  • d1001:子表名稱
  • USING meters:使用超級表meters作為模板
  • TAGS后指定標(biāo)簽值

4.2 自動建表

在寫入數(shù)據(jù)時自動創(chuàng)建子表:

INSERT INTO d1002 
USING meters 
TAGS (
    "California.SanFrancisco", 
    2
) VALUES (
    NOW, 
    10.2, 
    219, 
    0.32
);

當(dāng)子表d1002不存在時,系統(tǒng)會先自動創(chuàng)建子表,再寫入數(shù)據(jù)。

4.3 部分標(biāo)簽指定

可以只指定部分標(biāo)簽值,未指定的標(biāo)簽值為NULL:

INSERT INTO d1005
USING meters (location)
TAGS ("beijing.chaoyang")
VALUES ("2018-10-04 14:38:07", 10.15, 217, 0.33);

五、創(chuàng)建普通表

5.1 普通表概念

普通表是不帶任何標(biāo)簽的表,與普通關(guān)系型數(shù)據(jù)庫中的表相似。

5.2 普通表與子表的區(qū)別

特性普通表子表
標(biāo)簽擴展性無標(biāo)簽具有可變標(biāo)簽
表歸屬獨立存在隸屬于超級表
轉(zhuǎn)換限制不能相互轉(zhuǎn)換不能相互轉(zhuǎn)換

5.3 使用場景

普通表適用于:

  • 不需要標(biāo)簽分類的數(shù)據(jù)
  • 單一數(shù)據(jù)源的場景
  • 與傳統(tǒng)關(guān)系型數(shù)據(jù)庫兼容的需求

六、建模最佳實踐

6.1 數(shù)據(jù)庫規(guī)劃

按數(shù)據(jù)特征分庫

  • 不同采集頻率的數(shù)據(jù)分庫
  • 不同保留策略的數(shù)據(jù)分庫
  • 不同業(yè)務(wù)域的數(shù)據(jù)分庫

示例

-- 高頻采集數(shù)據(jù)庫
CREATE DATABASE high_freq PRECISION 'ms' KEEP 365 DURATION 1;

-- 低頻采集數(shù)據(jù)庫
CREATE DATABASE low_freq PRECISION 'ms' KEEP 3650 DURATION 30;

6.2 超級表設(shè)計

同類型設(shè)備歸為一張超級表

  • 相同采集量結(jié)構(gòu)
  • 相同的標(biāo)簽維度
  • 便于統(tǒng)一查詢和管理

標(biāo)簽設(shè)計原則

  • 選擇穩(wěn)定不變的屬性作為標(biāo)簽
  • 常用于篩選條件的屬性優(yōu)先
  • 標(biāo)簽數(shù)量不宜過多(建議不超過10個)

6.3 子表命名規(guī)范

推薦命名方式

  • 使用設(shè)備ID作為子表名
  • 保持命名規(guī)則的一致性
  • 避免使用特殊字符

示例

d1001, d1002, d1003...  -- 設(shè)備ID
meter_sf_001            -- 地區(qū)+序號
sensor_temp_001         -- 傳感器類型+序號

6.4 采集量設(shè)計

列數(shù)控制

  • 單表列數(shù)不宜過多(建議不超過50列)
  • 相關(guān)采集量放在一起
  • 不常用的采集量可單獨建表

數(shù)據(jù)類型選擇

  • 選擇合適的數(shù)據(jù)類型,避免浪費存儲
  • 浮點數(shù)注意精度要求
  • 字符串類型指定合理長度

七、完整建模示例

7.1 場景描述

某智能電表系統(tǒng),需要存儲以下數(shù)據(jù):

  • 設(shè)備數(shù)量:10000臺
  • 采集頻率:每10秒一次
  • 采集量:電流、電壓、相位
  • 標(biāo)簽:位置、分組ID

7.2 建模實現(xiàn)

-- 1. 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE power 
PRECISION 'ms' 
KEEP 365 
DURATION 10 
BUFFER 96;

-- 2. 切換數(shù)據(jù)庫
USE power;

-- 3. 創(chuàng)建超級表
CREATE STABLE meters (
    ts timestamp, 
    current float, 
    voltage int, 
    phase float
) TAGS (
    location varchar(64), 
    group_id int
);

-- 4. 寫入數(shù)據(jù)(自動創(chuàng)建子表)
INSERT INTO d1001 USING meters TAGS ("California.SanFrancisco", 2) 
VALUES (NOW, 10.3, 219, 0.31);

7.3 查詢驗證

-- 查詢所有設(shè)備
SELECT COUNT(*) FROM meters;

-- 按地區(qū)分組統(tǒng)計
SELECT location, COUNT(*), AVG(voltage) 
FROM meters 
GROUP BY location;

-- 時間窗口聚合
SELECT tbname, _wstart, avg(voltage) 
FROM meters 
WHERE ts >= NOW - 1h 
PARTITION BY tbname 
INTERVAL(1m);

八、建模常見問題

8.1 表數(shù)量過多

問題:設(shè)備數(shù)量巨大,擔(dān)心表數(shù)量過多

解決方案:TDengine專門優(yōu)化了海量表管理,千萬級表數(shù)量不影響性能

8.2 標(biāo)簽修改需求

問題:設(shè)備標(biāo)簽可能需要修改

解決方案:TDengine支持標(biāo)簽的修改、添加、刪除操作

8.3 歷史數(shù)據(jù)遷移

問題:如何遷移歷史數(shù)據(jù)

解決方案

  • 使用批量INSERT語句導(dǎo)入
  • 通過第三方工具(如DataX)遷移
  • 利用TDengine的導(dǎo)入功能

九、性能優(yōu)化建議

9.1 寫入優(yōu)化

  • 使用批量寫入代替單條寫入
  • 利用自動建表機制
  • 合理設(shè)置BUFFER參數(shù)

9.2 查詢優(yōu)化

  • 查詢時指定時間范圍
  • 使用PARTITION BY并行查詢
  • 合理使用SLIMIT控制結(jié)果

9.3 存儲優(yōu)化

  • 選擇合適的KEEP參數(shù)
  • 定期清理過期數(shù)據(jù)
  • 監(jiān)控壓縮率

十、監(jiān)控與維護

10.1 查看壓縮率

SELECT * FROM INFORMATION_SCHEMA.INS_DISK_USAGE 
WHERE db_name = 'power';

10.2 查看表分布

SHOW TABLE DISTRIBUTED meters;

10.3 數(shù)據(jù)庫狀態(tài)

SHOW DATABASES;
SHOW STABLES;
SHOW TABLES;

總結(jié)

數(shù)據(jù)建模是時序數(shù)據(jù)庫應(yīng)用開發(fā)的基礎(chǔ),合理的建模設(shè)計能夠充分發(fā)揮TDengine的性能優(yōu)勢。通過”一個數(shù)據(jù)采集點一張表”的設(shè)計理念,配合超級表模板機制,開發(fā)者可以高效管理海量設(shè)備數(shù)據(jù)。本文介紹的建模實踐,包括數(shù)據(jù)庫創(chuàng)建、超級表設(shè)計、子表管理等,為構(gòu)建工業(yè)數(shù)據(jù)管理平臺(IDMP)和實時數(shù)據(jù)庫應(yīng)用提供了完整的指導(dǎo)。TDengine憑借其專業(yè)的時序數(shù)據(jù)建模能力,成為物聯(lián)網(wǎng)和工業(yè)場景的理想選擇。