东湖之滨 发表于 2025-1-25 02:37:54

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

        IoTDB时序库是当前越来越流行以及基于其优势各大厂商越来越易担当的国产开源时序数据库,针对IoTDB的内容不做过多先容,在使用该时序库时,每每有肯定入门门槛,不同于关系型数据库或文档型数据库那般方便维护和接入开辟,iotdb时序库固然有官方文档的支持,以及一套SQL方案,但基于语言特性或者我们开辟习惯,我们每每需要单独写一套方案来做接入支持。
        这里先容了一套完整的Springboot(Spring Cloud)应用接入iotdb的方案支持,能够想关系型数据库一样,将对象作为一个时序模板,管理时序库数据。当然不尽完善,但应对简单的增删查改,根本满足使用要求。下面直接先容开源内容。
        线上效果说明:当前 单装备 时序元数据量(可以简单理解为表对象的行数据)达到了万万级,亿级测点累计,近七千装备量,总数据量近1TB,查询耗时仍旧是毫秒响应返回。
https://i-blog.csdnimg.cn/direct/08d36a849a284dc1adf9a70f6dbeaa8d.png

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

https://i-blog.csdnimg.cn/direct/bd9a9fb3c10e477487ab156671af6add.png
架构说明



[*]使用iotdb官方包的iotdb-session完成数据的新增,由于使用sql插入,性能太差了,使用官方session包实测每秒基础服单机配置可插入近五万条时序模板数据(开辟机配置i5/16G/SSD);
[*]数据查询参考官方sql方式,支持面向对象方式的传入查询条件
[*]数据update纵然用原偶然序时间戳,修改实体数据后重新插入,覆盖原偶然序;
[*]使用官方支持的delete删除数据;
[*]自定义注解类型处理器,实现ORM的优势。
https://i-blog.csdnimg.cn/direct/35e9439d1643400195b2374819fa49f8.png

工程特性



[*]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嵌入到目标应用工程
[*]根据#开辟流程自定义需要的时序数据逻辑

测试验证(示例)



[*] 完善数据库连接和应用配置,运行Application
[*] 接口http://localhost:8060/logKw/random/add?equipmentId=1001 新增时序实体数据
[*] 接口http://localhost:8060/logKw/list/days?equipmentId=1001&days=7 查询数据
[*] 接口http://localhost:8060/logKw/dts/logKw?equipmentId=1001&days=7 dts历史数据同步
https://i-blog.csdnimg.cn/img_convert/fe63616654f1be68f6fcefa96253955c.png
配置信息



[*]配置中增加多数据源依赖

[*]#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工程后注意变更点

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


[*]
[*]新增枚举类型DataCategoryEnum,定义数据在iotdb中的装备时序前缀(库);

[*]
[*]定义持久化信息实体,在需要入库的属性上加上@DataField注解;

[*]标识时序属性和数据类型
[*]实体必须包罗createTime/createDate/acquisitionTime属性之一,用于框架记载时序时间


[*]
[*]定义ORM相关Mapper类和xml文件,用于对象关系映射查询操作
   

[*]Mapper类需继续IotDbBaseMapper<T, Q>
[*]最少包罗queryPage、queryCount、queryCountList、delete基础方法实现

[*]
[*]定义业务调用接口和Service实现类
   

[*]Service实现类需继续AbstractIotDbUpdateService
[*]按需实现insert、queryAll、update、delete、insertBatch及自定义业务方法

功能拓展说明

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

工程开源参考:
GitHub - endcy/fcwenergy-iotdb-mybatis: IoTDB结合Mybatis使用示例

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: IoTDB结合Mybatis使用示例(增删查改自定义sql等)