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

時序數據庫數據建模實踐指南:從設計到實現的完整流程

Jing Wang

2026-04-17 /

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

一、建模設計原則

1.1 核心設計理念

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

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

1.2 建模步驟

  1. 分析業(yè)務場景,識別數據采集點
  2. 確定采集量和標簽
  3. 設計超級表結構
  4. 創(chuàng)建數據庫
  5. 創(chuàng)建超級表和子表

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

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

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

2.2 參數詳解

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

2.3 參數選擇建議

時間精度選擇

  • 毫秒(ms):適用于大多數物聯網場景
  • 微秒(us):適用于金融、高頻交易場景
  • 納秒(ns):適用于科學實驗、精密測量

數據保留策略

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

2.4 切換數據庫

USE power;

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

三、創(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列開始定義
  • 數據類型可以是整型、浮點型、字符串等
  • 示例:current float、voltage int

標簽列

  • 通過TAGS關鍵字定義
  • 數據類型可以是任意類型
  • 標簽名不能與采集量列名相同

3.3 數據類型選擇

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

四、創(chuàng)建子表

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

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

參數說明:

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

4.2 自動建表

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

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

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

4.3 部分標簽指定

可以只指定部分標簽值,未指定的標簽值為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 普通表概念

普通表是不帶任何標簽的表,與普通關系型數據庫中的表相似。

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

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

5.3 使用場景

普通表適用于:

  • 不需要標簽分類的數據
  • 單一數據源的場景
  • 與傳統關系型數據庫兼容的需求

六、建模最佳實踐

6.1 數據庫規(guī)劃

按數據特征分庫

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

示例

-- 高頻采集數據庫
CREATE DATABASE high_freq PRECISION 'ms' KEEP 365 DURATION 1;

-- 低頻采集數據庫
CREATE DATABASE low_freq PRECISION 'ms' KEEP 3650 DURATION 30;

6.2 超級表設計

同類型設備歸為一張超級表

  • 相同采集量結構
  • 相同的標簽維度
  • 便于統一查詢和管理

標簽設計原則

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

6.3 子表命名規(guī)范

推薦命名方式

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

示例

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

6.4 采集量設計

列數控制

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

數據類型選擇

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

七、完整建模示例

7.1 場景描述

某智能電表系統,需要存儲以下數據:

  • 設備數量:10000臺
  • 采集頻率:每10秒一次
  • 采集量:電流、電壓、相位
  • 標簽:位置、分組ID

7.2 建模實現

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

-- 2. 切換數據庫
USE power;

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

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

7.3 查詢驗證

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

-- 按地區(qū)分組統計
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 表數量過多

問題:設備數量巨大,擔心表數量過多

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

8.2 標簽修改需求

問題:設備標簽可能需要修改

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

8.3 歷史數據遷移

問題:如何遷移歷史數據

解決方案

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

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

9.1 寫入優(yōu)化

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

9.2 查詢優(yōu)化

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

9.3 存儲優(yōu)化

  • 選擇合適的KEEP參數
  • 定期清理過期數據
  • 監(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 數據庫狀態(tài)

SHOW DATABASES;
SHOW STABLES;
SHOW TABLES;

總結

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