IoTDB结合Mybatis使用示例(增删查改自定义sql等)

IoTDB时序库是当前越来越流行以及基于其优势各大厂商越来越易接受的国产开源时序数据库,针对IoTDB的内容不做过多介绍,在使用该时序库时,往往有一定入门门槛,不同于关系型数据库或文档型数据库那般方便维护和接入开发,iotdb时序库虽然有官方文档的支持,以及一套SQL方案,但基于语言特性或者我们开发习惯,我们往往需要单独写一套方案来做接入支持。

这里介绍了一套完整的Springboot(Spring Cloud)应用接入iotdb的方案支持,能够想关系型数据库一样,将对象作为一个时序模板,管理时序库数据。当然不尽完美,但应对简单的增删查改,基本满足使用要求。下面直接介绍开源内容。

线上效果说明:当前 单设备 时序元数据量(可以简单理解为表对象的行数据)达到了千万级,亿级测点累计,近七千设备量,总数据量近1TB,查询耗时依旧是毫秒响应返回。

github地址:

GitHub - endcy/fcwenergy-iotdb-mybatis: IoTDB结合Mybatis使用示例

架构说明

  • 使用iotdb官方包的iotdb-session完成数据的新增,因为使用sql插入,性能太差了,使用官方session包实测每秒基础服单机配置可插入近五万条时序模板数据(开发机配置i5/16G/SSD);
  • 数据查询参考官方sql方式,支持面向对象方式的传入查询条件
  • 数据update即使用原有时序时间戳,修改实体数据后重新插入,覆盖原有时序;
  • 使用官方支持的delete删除数据;
  • 自定义注解类型处理器,实现ORM的优势。

工程特性

  • IoTDB接入Mybatis,定义时序对象、ORM配置后即可使用,低学习成本,易用易拓展;
  • 不需要过于复杂的JDBC/ORM-XML的编码即可执行自定义数据对象的读写操作;
  • 支持官方工具包JDBC操作,补充ORM难于实现的更新操作,支持高效api批量插入;
  • 动态管理设备时序属性,无需先新增属性再执行入库操作,直接操作数据;
  • 方便工程拓展,使用装饰器实现需要的其他备选库持久化操作,如MYSQL等;
  • 针对不便处理的时序路径、数据类型等,使用工程自定义的执行器完成相关逻辑;
  • 注解简化处理字符串参数类型查询匹配
  • iotdb异步数据备份,历史数据DTS服务
  • 接口集成测试,方便快速测试

工程结构

  • iotdb-mybatis-core 核心工程模块,包含session的时序插入和mybatis集成的查询DML操作
  • common-domain 领域模型,包含时序数据实体及其他公共参数相关实体
  • iotdb-history-dts 历史数据DTS服务
  • application-demo 示例应用工程,包含时序数据实体查询新增触发等操作,集成测试接口验证等

部署准备

  • iotdb部署
    • 支持docker或jar运行部署
    • 推荐官方文档集群部署方案
  • 加入iotdb-mybatis-coreiotdb-mybatis-core工程
    • 工程作为module嵌入到目标应用工程
    • 根据#开发流程自定义需要的时序数据逻辑

测试验证(示例)

配置信息

  • 配置中增加多数据源依赖
    • #iotdb配置,根据配置和实际部署,自定义参数
      • spring.datasource.iotdb.username = 用户名
      • spring.datasource.iotdb.password = 密码
      • spring.datasource.iotdb.host = ip
      • spring.datasource.iotdb.port = 6667(或设定的端口)
      • spring.datasource.iotdb.driver-class-name = org.apache.iotdb.jdbc.IoTDBDriver
      • spring.datasource.iotdb.jdbc-url = jdbc:iotdb://{spring.datasource.iotdb.host}:{spring.datasource.iotdb.port}/
      • spring.datasource.iotdb.initial-size = 5
      • spring.datasource.iotdb.min-idle = 10
      • spring.datasource.iotdb.max-active = 50
      • spring.datasource.iotdb.max-wait = 60000
      • spring.datasource.iotdb.remove-abandoned = true
      • spring.datasource.iotdb.remove-abandoned-timeout = 30
      • spring.datasource.iotdb.time-between-eviction-runs-millis = 60000
      • spring.datasource.iotdb.min-evictable-idle-time-millis = 300000
      • spring.datasource.iotdb.test-while-idle = false
      • spring.datasource.iotdb.test-on-borrow = false
      • spring.datasource.iotdb.test-on-return = false
      • spring.datasource.iotdb.druid.pool-prepared-statements = true

开发流程

copy工程后注意变更点

按需在iotdb-mybatis-core模块中的Modules包中新增所需时序数据实体操作;

    1. 新增枚举类型DataCategoryEnum,定义数据在iotdb中的设备时序前缀(库);
    1. 定义持久化信息实体,在需要入库的属性上加上@DataField注解;
      • 标识时序属性和数据类型
      • 实体必须包含createTime/createDate/acquisitionTime属性之一,用于框架记录时序时间
    1. 定义ORM相关Mapper类和xml文件,用于对象关系映射查询操作
    • Mapper类需继承IotDbBaseMapper<T, Q>
    • 最少包含queryPage、queryCount、queryCountList、delete基础方法实现
    1. 定义业务调用接口和Service实现类
    • Service实现类需继承AbstractIotDbUpdateService
    • 按需实现insert、queryAll、update、delete、insertBatch及自定义业务方法

功能拓展说明

当然,基于此方案结合半ORM框架,理论上能够实现非常多的功能支持,本文暂不提供其他内容说明及高级应用示例,请接和IOTDB官方文档sql部分,自行实现。

工程开源参考:

GitHub - endcy/fcwenergy-iotdb-mybatis: IoTDB结合Mybatis使用示例

相关推荐
·薯条大王4 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO7 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆7 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光8 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林8 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
marvelyu8 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
AI人工智能+电脑小能手10 小时前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
BUG指挥官10 小时前
Sa-Token和Spring Security对比
java·后端·spring
小当家.10510 小时前
深入理解 ReAct Agent:从原理到 Java 实战
java·react.js·agent·react·架构设计·agent设计
geminigoth10 小时前
Spring AI Alibaba 入门开发一(备份)
java·人工智能·spring