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

時序數(shù)據(jù)庫數(shù)據(jù)寫入最佳實踐:高效寫入策略與技巧詳解

Jing Wang

2026-04-17 /

數(shù)據(jù)寫入是時序數(shù)據(jù)庫最基礎也是最關鍵的操作之一。高效的寫入策略不僅能提升系統(tǒng)吞吐量,還能降低資源消耗。本文將以TDengine時序數(shù)據(jù)庫為例,詳細介紹數(shù)據(jù)寫入的各種方式和最佳實踐。

一、基礎寫入方式

1.1 單條數(shù)據(jù)寫入

最基礎的寫入方式是向表中插入單條記錄。假設設備ID為d1001的智能電表在2018年10月3日14:38:05采集到數(shù)據(jù):電流10.3A,電壓219V,相位0.31。

INSERT INTO d1001 (ts, current, voltage, phase) 
VALUES ("2018-10-03 14:38:05", 10.3, 219, 0.31);

當INSERT語句中的VALUES部分包含了表的所有列時,可以省略VALUES前的字段列表:

INSERT INTO d1001 VALUES("2018-10-03 14:38:05", 10.3, 219, 0.31);

對于表的時間戳列(第一列),也可以直接使用數(shù)據(jù)庫精度的時間戳:

INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31);

以上三種SQL的效果完全相同。

1.2 批量數(shù)據(jù)寫入

當需要寫入多條數(shù)據(jù)時,可以在一條INSERT語句中寫入多條記錄,顯著提升寫入效率:

INSERT INTO d1001 VALUES
    ("2018-10-03 14:38:05", 10.2, 220, 0.23),
    ("2018-10-03 14:38:15", 12.6, 218, 0.33),
    ("2018-10-03 14:38:25", 12.3, 221, 0.31);

上面的SQL一共寫入了三條數(shù)據(jù),相比執(zhí)行三條單獨的INSERT語句,批量寫入能大幅減少網(wǎng)絡交互開銷。

1.3 多表寫入

對于多個設備的數(shù)據(jù),TDengine支持一次向多個表寫入數(shù)據(jù):

INSERT INTO d1001 VALUES 
    ("2018-10-03 14:38:05", 10.2, 220, 0.23),
    ("2018-10-03 14:38:15", 12.6, 218, 0.33),
    ("2018-10-03 14:38:25", 12.3, 221, 0.31) 
d1002 VALUES 
    ("2018-10-03 14:38:04", 10.2, 220, 0.23),
    ("2018-10-03 14:38:14", 10.3, 218, 0.25),
    ("2018-10-03 14:38:24", 10.1, 220, 0.22)
d1003 VALUES
    ("2018-10-03 14:38:06", 11.5, 221, 0.35),
    ("2018-10-03 14:38:16", 10.4, 220, 0.36),
    ("2018-10-03 14:38:26", 10.3, 220, 0.33);

這條SQL一共寫入了九條數(shù)據(jù),涉及三張不同的表。

二、高級寫入技巧

2.1 指定列寫入

可以通過指定列向表的部分列寫入數(shù)據(jù)。SQL中沒有出現(xiàn)的列,數(shù)據(jù)庫將自動填充為空值(NULL)。注意,時間戳列必須存在,且值不能為空。

INSERT INTO d1004 (ts, voltage, phase) 
VALUES("2018-10-04 14:38:06", 223, 0.29);

這條數(shù)據(jù)只包含電壓和相位,電流值為NULL。

2.2 寫入時自動建表

TDengine支持使用帶有USING關鍵字的自動建表語句進行寫入。當子表不存在時,先觸發(fā)自動建表,再寫入數(shù)據(jù);當子表已經(jīng)存在時,則直接寫入。

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

當子表d1005不存在時,先自動建表,標簽group_id的值為NULL,再寫入數(shù)據(jù)。

自動建表的INSERT語句也支持在一條語句中向多張表寫入數(shù)據(jù):

INSERT INTO d1001 USING meters TAGS ("California.SanFrancisco", 2) VALUES 
    ("2018-10-03 14:38:05", 10.2, 220, 0.23),
    ("2018-10-03 14:38:15", 12.6, 218, 0.33),
    ("2018-10-03 14:38:25", 12.3, 221, 0.31) 
d1002 USING meters TAGS ("California.SanFrancisco", 3) VALUES 
    ("2018-10-03 14:38:04", 10.2, 220, 0.23),
    ("2018-10-03 14:38:14", 10.3, 218, 0.25),
    ("2018-10-03 14:38:24", 10.1, 220, 0.22);

2.3 通過超級表寫入

TDengine還支持直接向超級表寫入數(shù)據(jù)。需要注意的是,超級表是一個模板,本身不存儲數(shù)據(jù),寫入的數(shù)據(jù)是存儲在對應的子表中。

INSERT INTO meters (tbname, ts, current, voltage, phase, location, group_id)
VALUES("d1001", "2018-10-03 14:38:05", 10.2, 220, 0.23, "California.SanFrancisco", 2);

通過指定tbname列向子表d1001寫入一條數(shù)據(jù)。

三、數(shù)據(jù)更新與刪除

3.1 數(shù)據(jù)更新

時序數(shù)據(jù)庫支持通過寫入重復時間戳的數(shù)據(jù)來更新記錄,新寫入的數(shù)據(jù)會替換舊值:

INSERT INTO d1001 (ts, current) VALUES ("2018-10-03 14:38:05", 22);

當子表d1001中已經(jīng)存在日期時間為2018-10-03 14:38:05的數(shù)據(jù)時,current(電流)的新值22會替換舊值。

3.2 數(shù)據(jù)刪除

為方便用戶清理由于設備故障等原因產(chǎn)生的異常數(shù)據(jù),TDengine支持根據(jù)時間戳刪除時序數(shù)據(jù):

DELETE FROM meters WHERE ts < '2021-10-01 10:40:00.100';

這條SQL將超級表meters中所有時間戳早于2021-10-01 10:40:00.100的數(shù)據(jù)刪除。

注意:數(shù)據(jù)刪除后不可恢復,請慎重使用。建議先使用SELECT語句加WHERE后的刪除條件查看要刪除的數(shù)據(jù)內(nèi)容,確認無誤后再執(zhí)行DELETE。

四、零代碼寫入方案

為了方便用戶輕松寫入數(shù)據(jù),TDengine已與眾多知名第三方工具實現(xiàn)無縫集成,包括:

工具類型代表工具
監(jiān)控采集Telegraf、collectd、StatsD
消息隊列EMQX、HiveMQ、Kafka
監(jiān)控系統(tǒng)Prometheus

用戶只須對這些工具進行簡單的配置,便可輕松將數(shù)據(jù)導入TDengine。

此外,TDengine企業(yè)版還提供了豐富的連接器:

  • MQTT
  • OPC
  • AVEVA PI System
  • Wonderware
  • MySQL
  • Oracle

通過在TDengine端配置相應的連接信息,用戶無須編寫任何代碼,即可高效地將來自不同數(shù)據(jù)源的數(shù)據(jù)寫入數(shù)據(jù)庫。

五、寫入性能優(yōu)化建議

5.1 批量寫入優(yōu)先

  • 盡量使用批量寫入而非單條寫入
  • 單條SQL寫入的數(shù)據(jù)量建議在1000-5000條之間
  • 減少網(wǎng)絡交互次數(shù),提升吞吐量

5.2 合理利用自動建表

  • 使用自動建表機制簡化應用邏輯
  • 避免頻繁的表存在性檢查
  • 減少DDL操作的開銷

5.3 時間戳處理

  • 優(yōu)先使用數(shù)值型時間戳,減少解析開銷
  • 保持時間戳的時區(qū)一致性
  • 避免時間戳亂序?qū)懭?/li>

5.4 表設計優(yōu)化

  • 合理設計采集量列,避免過多列
  • 標簽值不宜過長
  • 根據(jù)數(shù)據(jù)特征選擇合適的庫配置

六、壓縮率查看

通過查詢系統(tǒng)表INS_DISK_USAGE,可以查看數(shù)據(jù)庫的壓縮率和磁盤空間:

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

通過如下命令,可以查看表的壓縮率及具體分布情況:

SHOW TABLE DISTRIBUTED table_name;

總結(jié)

高效的數(shù)據(jù)寫入是時序數(shù)據(jù)庫發(fā)揮價值的基礎。TDengine時序數(shù)據(jù)庫提供了豐富的寫入方式,從單條寫入到批量寫入,從手動建表到自動建表,從SQL寫入到零代碼集成,滿足不同場景的需求。通過合理選擇寫入策略,開發(fā)者可以充分發(fā)揮時序數(shù)據(jù)庫的性能優(yōu)勢,為物聯(lián)網(wǎng)和工業(yè)數(shù)據(jù)管理平臺提供可靠的數(shù)據(jù)底座。TDengine憑借其高效的寫入能力和靈活的接入方式,成為構(gòu)建實時數(shù)據(jù)庫應用的理想選擇。