经历了半年的时间,0.10.0 大版本终于发布了!下面来看看这个版本的功能吧~
正文 2652 字,预计阅读时间 7 分钟。
发布手册
参考:https://raw.githubusercontent.com/apache/incubator-iotdb/release/0.10.0/RELEASE_NOTES.md
新功能
- 查询最新数据点,如 select last * from root
- 新的 Group by 语法,例如 select avg(s1) from root.sg.d1.s1 GROUP BY ([1, 50), 5ms),每个区间可 前开后闭 或 前闭后开
- 支持 GroupByFill 查询,在 group by 查询结果上补空值,如 select last_value(s1) from root.sg.d1 GROUP BY ([1, 10), 2ms) FILL(int32[previous])
- 增加 PrefiousUntilLast 填充规则,仅填充到最新时间点为止
- 新的 disable align 查询,不按照时间对齐结果集,如 select * from root disable align
- align by device 查询中 select 可选择不存在的 Measurement 和常量
- 增加 IN 谓词,如 where time in (1,2,3)
- Show Timeseries 时允许使用 limit & offset
- TsFile 集成 Apache Flink
- IoTDB 集成 Apache Flink
- 增加 MQTT 协议,默认关闭,可在配置文件中开启
- 增加 Measurement 的别名
- 可修改 Measurement 别名:upsert alias
- 为时间序列元数据增加标签和属性
- 可修改时间序列的标签和属性
- 在时间序列路径中支持特殊字符:-/ &%$#@
- 路径可以使用数字开头的字符串,如 root.sg.12a
- 允许用户指定非默认的JAVA_HOME,允许JAVA_HOME带空格
- 允许在 JDBC URL 中使用域名
- 允许加载外部TsFile
- 支持通过 show flush task info 查看 flush 任务状态(运维用)
- 将 Align by device 查询中的值过滤改为设备分别过滤
- 增加 0.8.1、0.9.0、0.9.1 的 Dockerfile
- 增加 RandomOnDiskUsableSpaceStrategy 多目录选择策略
- Session 中增加 insertRecords 接口
- Session 中增加 test 方法,可测试客户端和网络传输耗时
- Session 中增加批量创建时间序列功能
- Session 中增加判断时间序列是否存在的方法
- Session 中增加 JDBC 的遍历方式,避免构造RowRecord
- 在 CLI 中分批打印结果集
- 在 Grafana 中增加指定时间精度
- 在 Grafana 中支持 TEXT 类型数据展示
- 使用脚本启动 IoTDB 时可手动指定配置文件
- 热加载配置文件
- 在 SQL 中增加 flush/merge 语法
- 增加清空查询 cache 命令:clear cache
- 0.9 版本可在线升级为 0.10
- JDBC 支持 OSGI
- 打印 resource 的工具支持指定单一 resource 文件
- count timeseries group by level=x 查询默认以 root 为前缀
- 增加基于 OpenID 的 JWT 访问连接(代替用户名密码)
- 可根据系统内存比例分配内存大小
- 可配置自动注册时间序列时如何推断不同类型的 String 值
- 可配置时间序列的最长缓存点数 avg_series_point_number_threshold
- 在 insert 方法中支持某一列写入失败不影响其他列
- 增加 NaN 的 Double 类型数据格式
不兼容旧版本的修改
- 修改 last 和 first 聚合函数为 last_value 和 first_value
- 更新 RPC 版本为 V2,不可连接 0.9 系列
- TsFile 版本更新为第 2 版
- Session 中方法改名:insertBatch-> insertTablet, insertInBatch -> insertRecords, insert -> insertRecord
- 统一各种查询中 level 的含义,root 为 0 层
- Client 改名为 Cli
其他修改
- 语法解析从 Antlr 3 升级为 4
- 查询列为空时不再抛异常
- 统一 timestamp 和 time,都可以用
- 官网增加设计文档
- TsFile 尾部增加索引,优化单设备几十万测点的管理和查询
- Session 中可通过 isNull 判断某个 Field 是否为空
- PreviousFill 和 LinearFill 性能优化
- 优化 Count timeseries 查询性能,并且可不加前缀,默认root
- 优化 TsFileResource 的内存占用
- 限制 log 日志文件最大数量和大小
Bug 修复
- 【IOTDB-125】一边删除时间序列元数据,一遍写入数据,可能写入成功但是查询不到,再注册序列又可以查询到写入的数据。
- 【IOTDB-185】windows 环境由于路径存在空格运行 start-client.bat 失败
- 【IOTDB-370】修复解析sql的并发问题
- 【IOTDB-392】修复导出 CSV
- 【IOTDB-425】无法修改 root 密码
- 【IOTDB-470】0 字节 TsFile 引发的 IllegalArgumentException
- 【IOTDB-529】Group by 中不能用 NOW()
- 【IOTDB-531】Grafana 可视化 boolean 的异常
- 【IOTDB-643】文件系统使用 HDFS 时的并发查询报 BufferUnderflowException
- 【IOTDB-692】修复数据合并丢失数据
- 【IOTDB-735】并发自动创建时间序列报空指针异常
- 【IOTDB-738】修复 Measurement 存在空格时写入出现空指针
版本升级
0.10 的 数据文件格式升级了,先说如何从 0.9 升级到 0.10。可参考 http://iotdb.apache.org/Download/
(1)0.9 版本停止数据写入
(2)启动 CLI,执行 flush 命令,执行完成后关闭 server
(3)下载 0.10 版本,将配置文件中的各个目录指向 0.9 的各目录
(4)启动 0.10 版本,0.9 的数据即可查询
(5)客户端更新至 0.10 版本,即可继续写入
推荐提前备份数据。
总结
0.10 主要升级了查询引擎,为之后扩展查询功能打下了坚实的基础。同时规范了很多代码,我是盯着 PR 一个一个合进去的,亲眼见证了 IoTDB 的成长和完善(0.10 版本我最喜欢的功能是最新点查询)。透露一下,下个大版本会大幅提升查询性能,完善内存控制,届时各种 OOM 就基本不会遇到了。