IoTDB 常见问题 Q&A 第三期

关于 IoTDB 的 Q & A

IoTDB Q&A 第三期持续更新!我们将定期汇总我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题"小百科",方便大家使用 IoTDB。

Q1:查询最新值 & null 数据相加方法

问题现象 1

如果我想查 1000 个点的最新值,这些点的设备地址可能都不相同,那么我怎么查?

解决方案

  1. from 后面可以写多个设备

  2. select 后面也可以写多个测点

  3. 还可以用通配符

问题现象 2

在版本 1.1.1 中,group by 遇到两列数据相加时,其中一列为 null,另一列属性不为 null,导致两者相加之后为 null,有类似 ifnull 的函数处理这种问题吗?

以下是 SQL:

sql 复制代码
select (last_value(APM.1value) +last_value(APM2.value)) as val from root.dec group by ([10000,20000), 60s,10s)alse])

解决方案

可以用 case when 来实现,用户手册中有使用参考:

https://iotdb.apache.org/zh/UserGuide/latest/SQL-Manual/Function-and-Expression.html#case

Q2:集群中某一节点掉线导致删除序列失败

问题

1.3.2 版本三台机器的集群部署,删除时间序列时,三台机器都在线没问题,掉了一台机器之后报错,请问是什么原因?

原因

当前版本中,删除序列时所有元数据引擎的缓存都需要强一致性失效,某一节点不能成功则全部失败。因此元数据删除操作是必须要求所有节点都在线的。

方案

恢复集群异常节点的状态,再进行删除操作。

Q3:查询时报可用内存不足

现象

3C3D 集群中,进行查询时报可用内存不足,即使是 show devices 这样简单的查询也会报内存不足。

原因

  1. 客户目前使用的 JDK 版本是 1.8, 该版本 JDK 对 GC 控制效果不佳,有可能出现可用内存不足的情况,同时 GC 耗时较长,内存得不到及时释放。
  1. 集群 3 个节点之间网络延迟不一致,影响了集群间通信,导致节点之间吞吐不一致。

解决方案

  1. 升级 JDK 版本,由 JDK1.8 升级到 JDK17, 高版本 JDK 相比低版本有如下提升:
  • **性能优化:**JDK 17 的默认垃圾收集算法为 G1,提供了更好的吞吐量和更短的停顿时间,这对于提高应用程序的整体性能和用户体验非常有帮助。
  • **更好的内存管理:**JDK 17 提供了更先进的内存管理功能,包括更强的封装和更有效的内存分配策略,这有助于提高内存使用效率和减少内存泄漏。
  1. 解决集群间网络延迟不一致的问题。

采用上述解决方案后,查询可用内存不足的问题得到解决,同时查询效率得到明显提升。

启示

以后如果遇到集群性能发挥不佳的情况,可以排查一下集群间的网络延迟情况,这个对集群性能影响还是比较大的。

Q4:Continuous Query 在 ConfigNode 运行还是在 DataNode 运行

问题

请问 Continuous Query 在 ConfigNode 运行还是在 DataNode 运行?

解答

Continuous Query 执行阶段运行在 DataNode 中,但 Continuous Query 的调度和控制阶段(比如定时向 DataNode 发起查询)是在 ConfigNode 发生的。

IoTDB 中的 ConfigNode 仅用于做集群管理及节点调度等,所有与元数据/数据相关的操作均在 DataNode 节点上进行。

Q5:IoTDB 升级后 Trigger 不可用

问题现象

目前将 1.3.2 版本升级到了 1.3.3(通过替换 lib 的方式)。替换后发现原有触发器,show triggers 显示 active,但实际并未生效。卸载安装后依旧无法监听路径上的插入数据,不知道触发器逻辑是否有变更?没有发现异常日志,回退 1.3.2 版本后正常。

原因

Apache TsFile 目前已经独立成了一个项目,原来在 TsFile 下的类的包名都发生了变化,因此 Trigger 中依赖的 TsFile 路径发生了变化,需要重新打包注册。

方案

  • 需要更新依赖版本 iotdb-server 重新打包注册插件。

  • UDF、Pipe 同理。

Q6: 数据类型相关问题

指定数据类型

问题 1

通过 tools/import-data.sh 导入数据时,发现默认推断类型配置没有生效,请问是什么原因?

现象

解决方案

通过 tools/import-data.sh 命令导入数据时,需要指定 -typeInfer 参数,用于指定类型推断规则,如:

<srcTsDataType1=dstTsDataType1,srcTsDataType2=dstTsDataType2,...>

  • srcTsDataType 包括 boolean,int,long,float,double,NaN;

  • dstTsDataType 包括 boolean,int,long,float,double,text;

  • 当 srcTsDataType 为 boolean,dstTsDataType 只能为 boolean 或 text;

  • 当 srcTsDataType 为 NaN, dstTsDataType 只能为 float, double 或 text;

  • 当 srcTsDataType 为数值类型, dstTsDataType 的精度需要高于 srcTsDataType。

设置举例:-typeInfer boolean=text,float=double。

数据小数点位数是否影响查询性能

问题 2

存 double 型数据,截短保留 2 位小数和不截短,在查询效率和速度上有没有区别?

回答

没有,double 的长度和小数位数没太大关系。

升级后数据转换问题

问题 3

上面的查询在 1.0 版本是没问题的,1.3.2 版本就提示转换错误,这个可以设置吗,还是新版本只能这样转换?

回答

这个是因为尝试将字符串 'bad' 转成 float 时出错了。

也可用正则表达式替换处理:

sql 复制代码
select avg(cast(regexreplace(v, 'regex'='^[A-Za-z]+$', 'replace'='1', 'limit'='2'), 'type'='FLOAT')) as V, 
avg(cast(regexreplace(v1, "regex"="^[A-Za-z]+$", "replace"="0", "limit"="1"), 'type'='FLOAT')) as V1 from root.ln.d2 where time>=2024-11-20 00:00:00 and time<=2024-11-26 00:00:00 group by ([2024-11-20T00:00:00,2024-11-26T00:00:00 ),1d)

规上企业应用实例

能源电力: 中核武汉国网信通产业集团华润电力大唐先一上海电气国轩清安储能某储能厂商太极股份

航天航空: 中航机载共性北邮一号卫星

钢铁、金属冶炼: 宝武钢铁中冶赛迪|中国恩菲

交通运输: 中车四方长安汽车城建智控德国铁路

智慧工厂与物联: PCB 龙头企业博世力士乐德国宝马|北斗智慧物联京东昆仑数据怡养科技|绍兴安瑞思

相关推荐
Apache IoTDB10 天前
2024 年度时序数据库 IoTDB 论文总结
数据库·时序数据库·iotdb
Apache IoTDB21 天前
【IoTDB 线上小课 10】为什么选择 IoTDB 管理时序数据?
iotdb
报名搜谷安1 个月前
OSCP:我理解的Web环境知识
milvus·faiss·iotdb
程序员阿明1 个月前
spring boot通过连接池的方式连接时序库IotDB
spring boot·后端·iotdb
报名搜谷安1 个月前
23年8月我通过OSCP考试
milvus·faiss·iotdb
Apache IoTDB2 个月前
替换OpenTSDB和HBase,宝武集团使用IoTDB助力钢铁设备智能运维
运维·数据库·hbase·时序数据库·iotdb·opentsdb
Apache IoTDB2 个月前
IoTDB 与 HBase 对比详解:架构、功能与性能
大数据·数据库·架构·hbase·iotdb
起风了10242 个月前
IoTDB时序数据库使用
数据库·时序数据库·iotdb
程序小增2 个月前
springboot+iotdb的应用
spring boot·后端·iotdb