Apache IoTDB 发布 0.10.0!

2020-09-27 10:22:20 浏览数 (1)

经历了半年的时间,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 就基本不会遇到了。

0 人点赞