<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> [English](./README.md) | [ä¸æ–‡](./README-zh.md) # TsFile Document <pre> ___________ ___________.__.__ \__ ___/____\_ _____/|__| | ____ | | / ___/| __) | | | _/ __ \ | | \___ \ | \ | | |_\ ___/ |____|/____ >\___ / |__|____/\___ > version 1.0.0 \/ \/ \/ </pre> [](https://codecov.io/github/apache/tsfile) [](http://search.maven.org/#search|gav|1|g:"org.apache.tsfile") ## 简介 TsFile是一ç§ä¸ºæ—¶é—´åºåˆ—æ•°æ®è®¾è®¡çš„列å¼å˜å‚¨æ–‡ä»¶æ ¼å¼ï¼Œå®ƒæ”¯æŒé«˜æ•ˆåŽ‹ç¼©ã€é«˜è¯»å†™åžåé‡ï¼Œå¹¶ä¸”兼容多ç§æ¡†æž¶ï¼Œå¦‚Sparkå’ŒFlink。TsFile很容易集æˆåˆ°ç‰©è”网大数æ®å¤„ç†æ¡†æž¶ä¸ã€‚ æ—¶åºæ•°æ®å³æ—¶é—´åºåˆ—æ•°æ®ï¼Œæ˜¯æŒ‡å¸¦æ—¶é—´æ ‡ç¾ï¼ˆæŒ‰ç…§æ—¶é—´çš„顺åºå˜åŒ–,å³æ—¶é—´åºåˆ—化)的数æ®ï¼Œå…¶æ¥æºå¤šå…ƒã€æ•°æ®é‡åºžå¤§ï¼Œå¯å¹¿æ³›åº”用于物è”网ã€æ™ºèƒ½åˆ¶é€ ã€é‡‘èžåˆ†æžç‰é¢†åŸŸã€‚在数æ®é©±åŠ¨çš„当下,时åºæ•°æ®çš„é‡è¦æ€§ä¸è¨€è€Œå–»ã€‚ 尽管时åºæ•°æ®å¦‚æ¤æ™®é且é‡è¦ï¼Œä½†é•¿æœŸä»¥æ¥ï¼Œæ—¶åºæ•°æ®çš„管ç†éƒ½ç¼ºä¹æ ‡å‡†åŒ–çš„æ–‡ä»¶æ ¼å¼ã€‚TsFile 的出现为用户管ç†æ—¶åºæ•°æ®æä¾›äº†ç»Ÿä¸€çš„æ–‡ä»¶æ ¼å¼ã€‚ [点击查看更多](https://www.timecho.com/archives/tian-bu-shi-chang-kong-bai-apache-tsfile-ru-he-chong-xin-ding-yi-shi-xu-shu-ju-guan-li) ## TsFile 特性 TsFile é€šè¿‡è‡ªç ”å®žçŽ°äº†æ—¶åºæ•°æ®é«˜æ•ˆçŽ‡ç®¡ç†ã€é«˜çµæ´»ä¼ 输,并支æŒå¤šç±»è½¯ä»¶æ·±åº¦é›†æˆã€‚其特性包括: - æ—¶åºæ¨¡åž‹ï¼šä¸“门为物è”网设计的数æ®æ¨¡åž‹ï¼Œæ¯ä¸ªæ—¶é—´åºåˆ—与特定设备相关è”,所有设备通过分层结构相互连接; - è·¨è¯è¨€ç‹¬ç«‹ä½¿ç”¨ï¼šå¯ä»¥ä½¿ç”¨å¤šç§è¯è¨€çš„ SDK 直接读写 TsFile,使得一些轻é‡çº§çš„æ•°æ®è¯»å†™åœºæ™¯æˆä¸ºå¯èƒ½ã€‚ - 高效写入和压缩:为时间åºåˆ—é‡èº«å®šåˆ¶çš„列å¼å˜å‚¨æ ¼å¼ï¼Œå°†æ•°æ®æŒ‰è®¾å¤‡è¿›è¡Œç»„织,并ä¿è¯æ¯ä¸ªåºåˆ—çš„æ•°æ®è¿žç»å˜å‚¨ï¼Œæœ€å°åŒ–å˜å‚¨ç©ºé—´ã€‚相比 CSV,压缩比å¯æå‡ 90% 以上。 - 高查询性能:通过设备ã€ç‰©ç†é‡å’Œæ—¶é—´ç»´åº¦ç´¢å¼•ï¼ŒTsFile 实现了基于特定时间范围的时åºæ•°æ®å¿«é€Ÿè¿‡æ»¤å’ŒæŸ¥è¯¢ã€‚ç›¸æ¯”é€šç”¨æ–‡ä»¶æ ¼å¼ï¼ŒæŸ¥è¯¢åžåå¯æå‡ 2-10 å€ã€‚ - 开放集æˆï¼šTsFile 是时åºæ•°æ®åº“ IoTDB 的底层å˜å‚¨æ–‡ä»¶æ ¼å¼ï¼Œå¯ä¸Ž IoTDB å½¢æˆå¯æ’拔的å˜ç®—分离架构。TsFile 支æŒä¸Ž Sparkã€Flink ç‰å¤§æ•°æ®è½¯ä»¶å»ºç«‹æ— ç¼ç”Ÿæ€é›†æˆï¼Œä»Žè€Œç¡®ä¿è·¨ä¸åŒæ•°æ®å¤„ç†çŽ¯å¢ƒçš„兼容性和互æ“作性,实现时åºæ•°æ®è·¨ç”Ÿæ€æ·±åº¦åˆ†æžã€‚ ## TsFile 基本概念 TsFile å¯ç®¡ç†å¤šä¸ªè®¾å¤‡çš„æ—¶åºæ•°æ®ã€‚æ¯ä¸ªè®¾å¤‡å¯å…·æœ‰ä¸åŒçš„物ç†é‡ã€‚ æ¯ä¸ªè®¾å¤‡çš„æ¯ä¸ªç‰©ç†é‡å¯¹åº”一æ¡æ—¶é—´åºåˆ—。 TsFile æ•°æ®æ¨¡åž‹ï¼ˆSchema)定义了所有设备物ç†é‡çš„集åˆï¼Œå¦‚下表所示(m1 ~ m5) | Time | deviceId | m1 | m2 | m3 | m4 | m5 | |------|----------|----|----|----|----|----| | 1 | device1 | 1 | 2 | 3 | | | | 2 | device1 | 1 | 2 | 3 | | | | 3 | device2 | 1 | | 3 | 4 | 5 | | 4 | device2 | 1 | | 3 | 4 | 5 | | 5 | device3 | 1 | 2 | 3 | 4 | 5 | å…¶ä¸ Time å’Œ deviceId 为内置å—æ®µï¼Œæ— éœ€å®šä¹‰ï¼Œå¯ç›´æŽ¥å†™å…¥ã€‚ ## TsFile è®¾è®¡åŽŸç† ### 文件结构 下为 Apache TsFile 的文件结构。 - Page:一段连ç»çš„æ—¶åºæ•°æ®ï¼Œå˜å‚¨çš„基本å•å…ƒï¼ŒæŒ‰æ—¶é—´å‡åºæŽ’åºï¼Œæ—¶é—´æˆ³å’Œå€¼å„有å•ç‹¬çš„列进行å˜å‚¨ã€‚ - Chunk:由åŒä¸€åºåˆ—的多个连ç»çš„ Page 组æˆï¼Œä¸€ä¸ªæ–‡ä»¶åŒä¸€ä¸ªåºåˆ—å¯ä»¥å˜å‚¨å¤šä¸ª Chunk。 - ChunkGroup:由一个设备的一至多个 Chunk 组æˆï¼Œå¤šä¸ª Chunk å¯å…±äº«ä¸€åˆ—时间å˜å‚¨ï¼ˆå¤šå€¼æ¨¡åž‹ï¼‰ã€‚ - Index:TsFile 末尾的元数æ®æ–‡ä»¶åŒ…å«åºåˆ—内部时间维度的索引和åºåˆ—间的索引信æ¯ã€‚  ### ç¼–ç 和压缩 TsFile 通过采用二阶差分编ç ã€æ¸¸ç¨‹ç¼–ç (RLE)ã€ä½åŽ‹ç¼©å’Œ Snappy ç‰å…ˆè¿›çš„ç¼–ç 和压缩技术,优化时åºæ•°æ®çš„å˜å‚¨å’Œè®¿é—®ï¼Œå¹¶æ”¯æŒå¯¹æ—¶é—´æˆ³åˆ—和数æ®å€¼åˆ—进行å•ç‹¬ç¼–ç ,以实现更好的数æ®å¤„ç†æ•ˆèƒ½ã€‚ 其独特之处在于编ç 算法专为时åºæ•°æ®ç‰¹æ€§è®¾è®¡ï¼Œèšç„¦åœ¨æ—¶é—´å±žæ€§å’Œæ•°æ®ä¹‹é—´çš„相关性。 TsFileã€CSV å’Œ Parquet 三ç§æ–‡ä»¶æ ¼å¼çš„比较 | 维度 | TsFile | CSV | Parquet | |---------|--------|-----|---------| | æ•°æ®æ¨¡åž‹ | 物è”ç½‘æ—¶åº | æ— | 嵌套 | | å†™å…¥æ¨¡å¼ | 批, è¡Œ | è¡Œ | è¡Œ | | 压缩 | 有 | æ— | 有 | | 读å–æ¨¡å¼ | 查询, 扫æ | 扫æ | 查询 | | åºåˆ—索引 | 有 | æ— | æ— | | 时间索引 | 有 | æ— | æ— | 基于对时åºæ•°æ®åº”用需求的深刻ç†è§£ï¼ŒTsFile 有助于实现时åºæ•°æ®é«˜åŽ‹ç¼©æ¯”和实时访问速度,并为ä¼ä¸šè¿›ä¸€æ¥æž„建高效ã€å¯æ‰©å±•ã€çµæ´»çš„æ•°æ®åˆ†æžå¹³å°æ供底层文件技术支撑。 | æ•°æ®ç±»åž‹ | 推èç¼–ç | 推è压缩算法 | |---------|------------|--------| | INT32 | TS_2DIFF | LZ4 | | INT64 | TS_2DIFF | LZ4 | | FLOAT | GORILLA | LZ4 | | DOUBLE | GORILLA | LZ4 | | BOOLEAN | RLE | LZ4 | | TEXT | DICTIONARY | LZ4 | 更多类型的编ç 和压缩方å¼å‚è§[文档](https://iotdb.apache.org/zh/UserGuide/latest/Basic-Concept/Encoding-and-Compression.html) ## å¼€å‘和使用 TsFile [Java](./java/tsfile/README-zh.md) [C++](./cpp/README-zh.md) [Python](./python/README-zh.md)