åç±»:3.ååšåŒæ | ç¯ç« :04 æ°æ®æä»¶æ ŒåŒ

éçšçæ¬:TDengine v3.x(v3.3.x / v3.4.x) | æåæŽæ°:2026-05-28
TSDB æ°æ®æä»¶æ¯ TDengine æ¶åºæ°æ®çæç»æä¹ å圢åŒãæ°æ®ææ¶éŽèåŽç»ç»äžºå€äžªæä»¶é(File Set),æ¯äžªæä»¶éå å«çŽ¢åŒæä»¶ãæ°æ®æä»¶ãé¢èåæä»¶ç,å éšéçšååŒååšåååå猩,å®ç°é«å猩çåå¿«éåè£åªæ¥è¯¢ã
æ žå¿æŠå¿µéæ¥è¡š
| æŠå¿µ | 诎æ |
|---|---|
| File Set | èŠçäžäžª DURATION æ¶éŽæ®µçäžç»æä»¶ |
| fid | File Set ççŒå·,ç±æ¶éŽæ³è®¡ç®åŸåº |
| .head æä»¶ | æ°æ®å玢åŒ(Block Index),è®°åœæ¯äžªåçäœçœ®åç»è®¡ |
| .data æä»¶ | åæ°æ®ååš,æååç»ãæåå猩 |
| .sma æä»¶ | å级é¢èåæ°æ®(SUM/MIN/MAX/COUNT) |
| .stt æä»¶ | Sorted String Table,æªåå¹¶çèœçæ°æ® |
| .tomb æä»¶ | å é€è®°åœ(tombstone),æ è®°å·²å é€çæ¶éŽèåŽ |
| Data Block | æ°æ®å,å å«äžåŒ åè¡šäžæ®µæ¶éŽçæ°æ® |
诊ç»è§£æ
1. æä»¶éç»ç»
TSDB æä»¶éææ¶éŽåç»:
tsdb/
âââ current â å
ä¿¡æ¯(æä»¶éå衚)
â
âââ v<fid0>f<commitId>.head â FileSet 0(æ¶éŽæ®µ T0~T1)
âââ v<fid0>f<commitId>.data
âââ v<fid0>f<commitId>.sma
âââ v<fid0>f<commitId>.stt
â
âââ v<fid1>f<commitId>.head â FileSet 1(æ¶éŽæ®µ T1~T2)
âââ v<fid1>f<commitId>.data
âââ v<fid1>f<commitId>.sma
âââ v<fid1>f<commitId>.stt
â
âââ ...
fid 计ç®:fid = (timestamp - æ°æ®åºèµ·å§æ¶éŽ) / DURATION
commitId:æ¯æ¬¡ Commit éå¢,çšäºåºååäž fid çäžåçæ¬
2. .head æä»¶(å玢åŒ)
.head æä»¶ååšæææ°æ®åç玢åŒä¿¡æ¯,æ¥è¯¢æ¶å 读 .head ç¡®å®éèŠè¯»åçæ°æ®åäœçœ®:
.head æä»¶ç»æ:
âââââââââââââââââââââââââââââââââââââââââââ
â .head æä»¶ â
â â
â âââââââââââââââââââââââââââââââââââââ â
â â File Header â â
â â - magic number â â
â â - æä»¶çæ¬ â â
â âââââââââââââââââââââââââââââââââââââ â
â â
â âââââââââââââââââââââââââââââââââââââ â
â â Block Index(æ uid æåº) â â
â â â â
â â uid=1001: â â
â â Block 0: offset, size, minTs, â â
â â maxTs, numRows, minVer â â
â â Block 1: ... â â
â â â â
â â uid=1002: â â
â â Block 0: ... â â
â â Block 1: ... â â
â â â â
â âââââââââââââââââââââââââââââââââââââ â
â â
â âââââââââââââââââââââââââââââââââââââ â
â â Block Index ç玢åŒ(äºçº§çŽ¢åŒ) â â
â â å¿«éå®äœæäžª uid çå玢åŒäœçœ® â â
â âââââââââââââââââââââââââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââ
3. .data æä»¶(åæ°æ®)
.data æä»¶ååšå®é çååŒæ°æ®,ææ°æ®å(Block)ç»ç»:
.data æä»¶ç»æ:
âââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â .data æä»¶ â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â Data Block(äžäžªæ°æ®å) â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â Block Header (SDiskDataHdr) â â â
â â â - delimiter: 0xF00AFA0F(éæ°) â â â
â â â - uid: å衚 UID â â â
â â â - suid: è¶
级衚 UID â â â
â â â - nRows: è¡æ° â â â
â â â - numOfCols: åæ° â â â
â â â - szBlkCol: åå
ä¿¡æ¯æ°ç»å€§å° â â â
â â â - szVersion: çæ¬å·æ°ç»å€§å° â â â
â â â - szKey: æ¶éŽæ³æ°ç»å€§å° â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â Column Metadata (SBlockCol[]) â â â
â â â æ¯åäžäžª: â â â
â â â - colId: åçŒå· â â â
â â â - type: æ°æ®ç±»å â â â
â â â - flag: æ¯åŠå
š NULL / æ¯åŠæ NULL â â â
â â â - szBitmap: NULL äœåŸå€§å° â â â
â â â - szOffset: åé¿ååç§»æ°ç»å€§å° â â â
â â â - szValue: å猩ååŒæ°ç»å€§å° â â â
â â â - offset: åæ°æ®åšåå
çåç§» â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â Version Array(çæ¬å·æ°ç») â â â
â â â æ¯è¡å¯¹åºäžäžªçæ¬å·(çšäº MVCC) â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â Timestamp Column(æ¶éŽæ³å) â â â
â â â Delta-of-Delta çŒç + å猩 â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â â â Column 1 Data â â â
â â â [NULL Bitmap] + [Values(çŒç +å猩)] â â â
â â âââââââââââââââââââââââââââââââââââââââââââââ†â â
â â â Column 2 Data â â â
â â â [NULL Bitmap] + [Offsets] + [Values] â â â
â â âââââââââââââââââââââââââââââââââââââââââââââ†â â
â â â ... â â â
â â ââââââââââââââââââââââââââââââââââââââââââââââ â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â Data Block (next block...) â â
â âââââââââââââââââââââââââââââââââââââââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââ
4. æ°æ®åå çååžå±
åååšæ°æ®åäžçååšæ ŒåŒ:
å®é¿å(åŠ INTãFLOAT):
ââââââââââââââââ¬ââââââââââââââââââââââââââââââ
â NULL Bitmap â Values(ç±»åç¹åçŒç +LZ4å猩)â
â âN/8â åè â å猩åçåŒæ°ç» â
ââââââââââââââââŽââââââââââââââââââââââââââââââ
åé¿å(åŠ BINARYãNCHAR):
ââââââââââââââââ¬âââââââââââââââ¬âââââââââââââââââââ
â NULL Bitmap â Offset Array â Values(è¿ç»åæŸ)â
â âN/8â åè â N à 4 åè â å猩åçåèæµ â
ââââââââââââââââŽâââââââââââââââŽâââââââââââââââââââ
Offset Array: æ¯è¡åš Values åºçèµ·å§åç§»
çšäºéæºè®¿é®æè¡çåé¿åŒ
5. .sma æä»¶(é¢èå)
.sma æä»¶ç»æ:
䞺æ¯äžªæ°æ®åååšé¢è®¡ç®çèååŒ:
Block 对åºç SMA è®°åœ:
âââââââââââââââââââââââââââââââââââââââ
â Column 0 (timestamp): â
â min, max â
â Column 1 (numeric): â
â sum, min, max, numOfNull â
â Column 2 (numeric): â
â sum, min, max, numOfNull â
â ... â
âââââââââââââââââââââââââââââââââââââââ
çšé:
- SELECT COUNT(*) â çŽæ¥çš nRows,æ éè¯»æ°æ®
- SELECT MIN(col) WHERE ts > X â å
æ¯èŸå级 min/max
åŠæ max < æ¥è¯¢æ¡ä»¶åŒ â æŽåè·³è¿
- 倧å¹
åå°äžå¿
èŠçæ°æ®å读å
6. .stt æä»¶(Sorted String Table)
STT æä»¶ååšå°æªåå¹¶å°äž»æ°æ®æä»¶çèœçæ°æ®:
.stt æä»¶ç¹ç¹:
- å
éšç»æäž .data 类䌌(åçŽ¢åŒ + æ°æ®å)
- å¯èœå
å«å€åŒ åè¡šçæ··åæ°æ®
- æ°æ®åšåå
æåº,äœäžååéŽå¯èœæ¶éŽéå
- å€äžª STT æä»¶å¯ä»¥å
±å(STT_TRIGGER æ§å¶)
STT æä»¶ççåœåšæ:
MemTable flush â åå
¥ STT æä»¶
STT æä»¶æ°èŸŸå° STT_TRIGGER â è§Šååå¹¶
åå¹¶å â STT æ°æ®æŽåå° .head/.data/.sma
æ§ STT æä»¶å é€
7. .tomb æä»¶(å 逿 è®°)
.tomb æä»¶ç»æ:
è®°åœ DELETE æäœçæ¶éŽèåŽ:
âââââââââââââââââââââââââââââââââââââââââââ
â Delete Record 1: â
â uid: ç®æ å衚 â
â startTs: å é€èµ·å§æ¶éŽ â
â endTs: å é€ç»ææ¶éŽ â
â version: å 逿äœççæ¬å· â
âââââââââââââââââââââââââââââââââââââââââââ€
â Delete Record 2: ... â
âââââââââââââââââââââââââââââââââââââââââââ
æ¥è¯¢æ¶:读å .tomb â è¿æ»€æè¢«å é€çæ¶éŽèåŽ
åå¹¶æ¶:ç©çå é€è¢«æ è®°çæ°æ®è¡
8. æ¥è¯¢æ¶çæä»¶è¯»åè·¯åŸ
æ¥è¯¢äžåŒ åè¡šçæ°æ®:
SELECT * FROM d1001 WHERE ts >= T1 AND ts <= T2
â
âŒ
â è®¡ç® fid èåŽ:
fid_start = (T1 - dbStartTime) / DURATION
fid_end = (T2 - dbStartTime) / DURATION
â
âŒ
⡠对æ¯äžªçžå
³ FileSet:
a. 读å .head â æŸå° uid=d1001 çå玢åŒ
b. éåå玢åŒ,æ [minTs, maxTs] è¿æ»€:
- maxTs < T1 â è·³è¿
- minTs > T2 â è·³è¿
- æäº€é â éèŠè¯»å
c. 读å .sma â æ£æ¥å级ç»è®¡æ¯åŠæ»¡è¶³å
¶ä»æ¡ä»¶
d. 读å .data â å®äœå°ååç§» â è§£åæ°æ®å
e. 读å .tomb â è¿æ»€å·²å é€è¡
â
âŒ
⢠åå¹¶ MemTable + STT + .data çç»æ
â
âŒ
⣠èŸåºæåºç»æ
9. å€è·¯å并读åç®æ³
æ¥è¯¢æ¶éèŠå°æ¥èª MemTableãSTT æä»¶åäž»æ°æ®æä»¶çæ°æ®å并䞺ç»äžæåºç»æãä»¥äžæ¯å ·äœç®æ³:
å€è·¯åœå¹¶æåºç®æ³(é对åå衚 uid):
æ°æ®æº(æ¯äžªæ°æ®æºå
éšå·²ææ¶éŽæ³æåº):
âââââââââââââââââââ âââââââââââââââââââ
â Active MemTable â â Immutable MemTblâ
â æ°æ®æº 1 â â æ°æ®æº 2 â
ââââââââââ¬âââââââââ ââââââââââ¬âââââââââ
â â
ââââââââââŽâââââââââ âââââââââŽââââââââââ
â STT File 1 â â STT File 2 â
â æ°æ®æº 3 â â æ°æ®æº 4 â
ââââââââââ¬âââââââââ ââââââââââ¬âââââââââ
â â
ââââââââââŽâââââââââââââââââââââââŽâââââââââ
â .data äž»æä»¶(æåºååºå) â
â æ°æ®æº 5 â
ââââââââââââââââââââââ¬ââââââââââââââââââââ
â
âŒ
âââââââââââââââââââââââââ
â äŒå
éå(Min-Heap) â
â â
â æ (timestamp, ver) â
â æåºçå é¡¶å³äžºäžäžè¡ â
âââââââââââââ¬ââââââââââââ
â
âŒ
èŸåºæåºç»æè¡
åå¹¶æåºç诊ç»è§å:
æåºé®: (timestamp ASC, version DESC)
â åå§å:仿¯äžªæ°æ®æºå第äžè¡,æŸå
¥äŒå
éå
⡠埪ç¯åŒ¹åºå é¡¶(timestamp æå°çè¡):
- åŠæå é¡¶ timestamp åš .tomb å é€èåŽå
â è·³è¿
- åŠæå é¡¶ timestamp == äžäžèŸåºè¡ç timestamp:
â åäžæ¶éŽæ³æå€äžªçæ¬
â åªå version æé«çé£è¡(ææ°åå
¥èåº)
â 䞢åŒå
¶ä»çžåæ¶éŽæ³çè¡
- åŠå â èŸåºè¯¥è¡å°ç»æé
⢠ä»åŒ¹åºè¡çæ°æ®æºåäžäžè¡,è¡¥å
¥äŒå
éå
⣠éå€ â¡â¢ çŽå°æææ°æ®æºèå°œ
çæ¬å·(version)çäœçš:
æ¯æ¬¡åå
¥æäœåé
äžäžªå
šå±éå¢ç version
åºæ¯:讟å€è¡¥æ¥å岿°æ®
åå§åå
¥: ts=T1, ver=100, value=25.0
è¡¥æ¥èŠå: ts=T1, ver=500, value=25.3
åå¹¶æ¶: 䞀è
timestamp çžå
â å ver=500 ç 25.3(ååå
¥çèŠçå
åå
¥ç)
â ver=100 ç 25.0 被䞢åŒ
version ä¿è¯:
- .data æä»¶äž: åå€Žè®°åœ minVer/maxVer
- MemTable äž: æ¯è¡æºåžŠ version
- STT äž: åå
æ (ts, ver) æåº
â å€è·¯åå¹¶å¯ä»¥æ£ç¡®å€çä»»äœåå
¥é¡ºåº
äŒåçç¥:
â æ°æ®æºè£åª:
åŠææäžª STT æä»¶ç [minTs, maxTs] äžæ¥è¯¢æ 亀é
â çŽæ¥è·³è¿,äžåäžåå¹¶
â¡ åæºå¿«éè·¯åŸ:
åŠæåªæäžäžªæ°æ®æºææ°æ®(åžžè§æ
åµ:æ ä¹±åº)
â è·³è¿å€è·¯åå¹¶,çŽæ¥é¡ºåºèŸåº
⢠åçº§çæ¬æ£æ¥:
.data åç maxVer < STT åç minVer
â 诎æ STT æ°æ®å
šéšæŽæ°
â .data ååšéå æ¶éŽæ®µå
坿Žåè·³è¿
⣠ééå æ¶éŽæ®µçæŒæ¥:
.data: [T1~T5], STT: [T6~T10]
æ¶éŽæ®µäžéå â æ éåœå¹¶æåº
â ææ¶éŽé¡ºåºæŒæ¥å³å¯(é¿å
å æäœåŒé)
9. æ°æ®å倧尿§å¶
| åæ° | é»è®€åŒ | äœçš |
|---|---|---|
| MAXROWS | 4096 | ååæå€§è¡æ°,蟟å°å³åŒæ°å |
| MINROWS | 100 | ååæå°è¡æ°(圱åèœçæ¶æº) |
| TSDB_PAGESIZE | 4 KB | I/O 对éœé¡µå€§å° |
æ°æ®å倧å°äŒ°ç®:
è¡å®œ 100 åè à 4096 è¡ = 400 KB(å猩å)
COMP=2 å猩å â 40~80 KB
åè¶å€§:
â å猩çè¶é«(æŽå€çžäŒŒæ°æ®)
â åå°åçŽ¢åŒæ¡ç®æ°
â ç¹æ¥éèŠè§£åæŽå€æ çšæ°æ®
åè¶å°:
â ç¹æ¥æŽå¿«(è§£åæ°æ®éå°)
â å猩çéäœ
â å玢åŒèšè
代ç 瀺äŸ
æ¥çæä»¶éç¶æ
-- éè¿ç³»ç»è¡šæ¥çæ°æ®æä»¶ä¿¡æ¯
SHOW power.VGROUPS;
-- æ¥çç£ç䜿çš
SHOW CLUSTER VARIABLES;
# çŽæ¥è§å¯ç£çæä»¶
ls -la /var/lib/taos/vnode/vnode2/tsdb/
# v0f1.head v0f1.data v0f1.sma v0f1.stt v1f1.head ...
æ§èœèé
æä»¶æ°é对æ¥è¯¢ç圱å
| å çŽ | 圱å |
|---|---|
| FileSet æ°éå€ | æ¶éŽå®äœç²Ÿç¡®,åå°äžå¿ èŠæä»¶è¯»å |
| å FileSet å åå€ | éèŠè¯»æŽå€ .head çŽ¢åŒæ°æ® |
| STT æä»¶å€ | æ¥è¯¢éèŠå€è·¯åå¹¶,å»¶è¿å¢å |
| .tomb è®°åœå€ | æ¯æ¬¡æ¥è¯¢éèŠæ£æ¥å 逿 è®° |
I/O æš¡åŒ
| æäœ | I/O æš¡åŒ | äŒå |
|---|---|---|
| åå ¥ WAL | 顺åºè¿œå | é«åå |
| åå ¥ .data | 顺åºåæ°æä»¶ | æ éæºå |
| 读å .head | éæºè¯»(å®äœå) | å°œéçŒå |
| 读å .data | 顺åºè¯»(æŽå) | é¢è¯»äŒå |
FAQ
Q1: 䞺ä»ä¹äžçšåäžå€§æä»¶åæææ°æ®?
ææ¶éŽåæä»¶çäŒå¿:
- è¿æå é€ = å æä»¶(O(1),æ éæ«æ)
- æ¥è¯¢æ¶éŽèåŽæç¡®æ¶å¯è·³è¿æ å ³æä»¶
- å€çº§ååšå¯ææä»¶ç²åºŠè¿ç§»
Q2: .head å .data 䞺ä»ä¹ååŒååš?
å犻玢åŒåæ°æ®å 讞:
- æ¥è¯¢æ¶å åªè¯»çŽ¢åŒ(å°æä»¶,å¯çŒå)
- ç¡®å®éèŠåªäºååæè¯»æ°æ®æä»¶
- é¿å å€§æ°æ®æä»¶çå šéæ«æ
Q3: ååŒååšå¯¹ SELECT * æåœ±åå?
SELECT * éèŠè¯»åææå,ååŒååšäžéèŠæŒè£
æ¯äžåãäœç±äºæ¶åºæ¥è¯¢å€§å€åªå
³æ³šå°æ°å(åŠ SELECT avg(temperature)),ååŒååšçåè£åªäŒå¿è¿å€§äºå
šå读åçå£å¿ã
åè
ç³»ç»ææ¶ç¯
- 01-ãTDengine æŽäœæ¶æå šæ¯ã
- 02-ãéçŸ€æææ·±åºŠè§£æã
- 03-ãMNode å éšæºå¶æ·±åºŠè§£æã
- 04-ãRPC éä¿¡å±æ·±åºŠè§£æã
- 05-ãVNode çåœåšæã
- 06-ãRAFT å ±è¯åè®®ã
- 07-ã端å°ç«¯çæ¶æ¯æµã
æ°æ®æš¡å
- 01-ãæ°æ®åºå建äžåæ°è¯Šè§£ã
- 02-ãè¶ çº§è¡š/å衚/æ®é衚ã
- 03-ãæ¯ææ°æ®ç±»å深床解æã
- 04-ãTDengine Tag 讟计å²åŠäž Schema åæŽæºå¶ã
- 05-ãTDengine èæè¡šå®ç°åçã
ååšåŒæ
- 01-ãTDengine ååšåŒææŠè§ã
- 02-ãTDengine MemTable 深床解æã
- 03-ãTDengine WAL é¢åæ¥å¿æºå¶ã
å ³äº TDengine
TDengine äžäžºç©èçœIoTå¹³å°ãå·¥äžå€§æ°æ®å¹³å°è®Ÿè®¡ãå ¶äž,TDengine TSDB æ¯äžæ¬Ÿé«æ§èœãååžåŒçæ¶åºæ°æ®åº(Time Series Database),åæ¶å®è¿åžŠæå 建ççŒåãæµåŒè®¡ç®ãæ°æ®è®¢é çç³»ç»åèœ;TDengine IDMP æ¯äžæ¬ŸAIåçå·¥äžæ°æ®ç®¡çå¹³å°,å®éè¿æ ç¶å±æ¬¡ç»æå»ºç«æ°æ®ç®åœ,å¯¹æ°æ®è¿è¡æ ååãæ æ¯å,å¹¶éè¿ AI æäŸå®æ¶åæãå¯è§åãäºä»¶ç®¡çäžæ¥èŠçåèœã

437

被æå ç æ¡è¯è®º
䞺ä»ä¹è¢«æå ?



