近期,我们调整了TDengine的版本命名机制。2.0.x.x和2.2.x.x等版本为稳定版本,只会合并bug修复,不引入新功能。2.1.x.x和2.3.x.x为开发版本,发布时会标记beta。如果在业务中试用,建议大家使用稳定版本;如果想尝试最新功能,可以尝试最新的beta版本。 我们刚刚发布了TDengine 2.2.0.0稳定版。新版本有几个值得重点关注的特性:
- 纳秒时间精度:在毫秒、微秒基础上,允许数据库的时间戳设置为纳秒精度。
- Schemaless:兼容 InfluxDB 的数据写入协议 LINE 。
- UDF 功能:允许用户创建自定义 SQL 函数。
- 嵌套查询:支持在 FROM 子句中使用单层非关联子查询,显著提升 SQL 语句的查询表达能力。
- 原生接口写入:通过原生接口写入数据,可以避免 SQL 拼接和 SQL 解析的计算消耗,从而显著提升数据写入速度。
- 会话窗口(SESSION):会话窗口根据相邻两条记录的时间戳差值来确定是否属于同一个会话,时间差异超出阈值时即认为开启了下一个窗口。
- 状态窗口(STATE):使用整数或布尔值来标识产生记录时设备的状态量,产生的记录如果具有相同的状态量取值则归属于同一个状态窗口,数值改变后该窗口关闭。
- 浮点数有损压缩:提供对浮点数数据列的有损压缩插件,可以显著提升数据的压缩率,节省磁盘空间。
- 支持 4096 列:数据表/超级表允许创建的数据列由 1024 列拓宽到最大 4096 列。
- 支持 JOIN:完善地支持数据表与数据表、超级表与超级表、子查询与子查询之间的 JOIN 操作。
另外,我们也引入其他一些小的功能和性能优化。
- 查询算子“IN”:用于 WHERE 子句中,可以匹配一个集合中的任意值。
- 计算函数“IRATE()”:计算瞬时增长率。
- 计算函数“DERIVATIVE()”:统计表中某列数值的单位变化率。
- “SHOW CREATE”指令:对一个已经存在的数据库/表,返回其创建语句,以便于数据迁移。
- COMPACT 指令:对数据落盘文件进行碎片整理。解决因行覆盖、表删除、数据过期等原因而导致的数据碎片,改善查询操作的性能表现。
- 数据库参数热生效:通过“ALTER DATABASE”指令修改数据库设置参数时,无需重启 taosd 即可生效。
- jemalloc 内存分配器:适配 jemalloc 内存分配器,改善频繁申请小内存片段时的性能表现。
- promql 正则查询:兼容 Prometheus 的 promql 正则查询语法。
- 部分列更新:允许 UPDATE 语句仅更新部分指定列的值,而保留未涉及的数据列的原始取值,从而改善宽表情景下的数据更新效率。
- DISTINCT 支持普通列:DISTINCT 指令原先仅能应用于标签列,现在也可以用于普通数据列。
- 支持 gorm:Go 语言 Connector 支持适配 gorm 类库。
- 网速监测工具:工具“taos”新增网络传输速度测试和 FQDN 解析速度测试功能。
- LAST_ROW 性能优化:改善 LAST_ROW 函数的性能表现。
自2.0版本发布以来,经过研发人员和社区用户的不断努力,TDengine做了大量更新。我们不妨再来看一下。
- 多副本集群:通过多副本的机制来提供系统的高可用性,包括VNode和MNode的高可用性。
- 支持乱序写入:可以不按照时间戳顺序写入数据。
- 支持数据更新:当历史数据中出现数据跳转不准或脏数据等问题,可以使用更新操作进行数据修订。
- 更丰富的 SQL 函数:包含7类聚合函数、10类选择函数、4类计算函数,同时还支持按时间段等窗口切分方式进行聚合结果查询。
- MQTT 写入:MQTT 是流行的物联网数据传输协议,较通用的包括 EMQ Broker、HiveMQ Broker,无需任何代码,即可将这两类 MQTT的数据直接写入 TDengine。
- CSV 文件写入:通过一行代码即可将 CSV 文件写入 TDengine。
- 自动建表多表写入:在某些特殊场景中,用户在写数据时并不确定某个数据采集点的表是否存在,此时可在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表;支持同时向两张以上的表中写入数据,提升写入速度。
- 支持“BETWEEN AND”语法:用在WHERE子句中,可以选取介于两个值之间的数据范围。
- 支持 SLIDING 和 SLIMIT。
- 支持 DISTINCT:DISTINCT语法用于提取一个不同的值,去掉多余重复的,保留唯一值。目前 DISTINCT 关键字只支持对超级表的标签列进行去重,而不能用于普通列。
- 支持 UNION JOIN。
- 多级存储。支持挂载多块磁盘,并可以根据数据的特性把频繁访问的数据分配到高性能的磁盘介质上。便于数据按时间来分片存储,从而平衡存储成本和读取延时。
- 时间戳支持1970年以前的时间点,方便应用程序的业务处理。
- CacheLast 缓存:CasheLast参数控制是否在内存中缓存子表的最近数据,可以显著提升物联网典型场景的数据访问速度。