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

    测试验证(示例)

    • 完善数据库连接和应用配置,运行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历史数据同步

      测试验证示例

    配置信息

    • 配置中增加多数据源依赖
      • #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使用示例

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/67990.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    Git 小白入门教程

    &#x1f3af; 这篇文章详细介绍了版本控制的重要性&#xff0c;特别是通过Git实现的分布式版本控制相对于SVN集中式控制的优势。文章首先解释了版本控制的基本概念&#xff0c;强调了在文档或项目多版本迭代中备份与恢复任意版本的能力。接着&#xff0c;重点阐述了Git的历史背…

    .Net Core微服务入门全纪录(四)——Ocelot-API网关(上)

    系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

    【二叉树的深搜】二叉树剪枝

    文章目录 814. 二叉树剪枝解题思路&#xff1a;深度优先遍历 后序遍历另一种写法 814. 二叉树剪枝 814. 二叉树剪枝 ​ 给你二叉树的根结点 root &#xff0c;此外树的每个结点的值要么是 0 &#xff0c;要么是 1 。 ​ 返回移除了所有不包含 1 的子树的原二叉树。 ​ 节点…

    CSS实现实现票据效果 mask与切图方式

    一、“切图”的局限性 传统的“切图”简单暴力,但往往缺少适应性。 适应性一般有两种,一是尺寸自适应,二是颜色可以自定义。 举个例子,有这样一个优惠券样式 关于这类样式实现技巧,之前在这篇文章中有详细介绍: CSS 实现优惠券的技巧 不过这里略微不一样的地方是,两个…

    C语言数组详解:从基础到进阶的全面解析

    在C语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储多个相同类型的数据。数组的引入使得C语言能够高效地存储和操作大量数据。在任何一个C语言程序中&#xff0c;数组都发挥着极其重要的作用。无论是在算法实现、数据存储、还是在复杂程序的设计中&#xff0c…

    Vue2 项目二次封装Axios

    引言 在现代前端开发中&#xff0c;HTTP请求管理是构建健壮应用的核心能力之一。Axios作为目前最流行的HTTP客户端库&#xff0c;其灵活性和可扩展性为开发者提供了强大的基础能力。 1. 为什么要二次封装Axios&#xff1f; 1.1 统一项目管理需求 API路径标准化&#xff1a;…

    Jmeter 动态参数压力测试时间段预定接口

    &#x1f3af; 本文档详细介绍了如何使用Apache JMeter进行压力测试&#xff0c;以评估预定接口在高并发场景下的性能表现。通过创建线程组模拟不同数量的用户并发请求&#xff0c;利用CSV文件动态配置时间段ID和用户token&#xff0c;确保了测试数据的真实性和有效性。文档中还…

    Unity常用特性(Attribute)用法

    一.UnityEngine命名空间 1.[Header(string)] inspector面板上给显示的字段上加一个描述 通常情况下&#xff0c;用于在 Inspector 窗口中创建字段的逻辑分组 public class AttributeTest : MonoBehaviour {[Header("public_field_num")]public int num; }2.[Tool…

    vue项目的创建

    运行第一个vue-cli应用程序 创建一个基于webpack模板的vue应用程序 vue init webpack 项目名根据自己需求选择 创建好之后如下 运行 cd vue01npm run dev运行之后如下 复制访问地址 &#xff1a; http://localhost:8080 停止服务 两次ctrlC 或者 一次ctrlc然后y idea中使用…

    【CS61A 2024秋】Python入门课,全过程记录P3(Week5 Sequences开始,更新于2025/1/23)

    文章目录 关于基本介绍&#x1f44b;新的问题Week5Mon Sequences阅读材料 关于 个人博客&#xff0c;里面偶尔更新&#xff0c;最近比较忙。发一些总结的帖子和思考。 江湖有缘相见&#x1f91d;。如果读者想和我交个朋友可以加我好友&#xff08;见主页or个人博客&#xff0…

    android手机应用连接热点后无法进行tcp连接

    你在WifiNetworkSpecifer连接回调onavaliable里&#xff0c;再次调用bindProcessToNetwork试试&#xff0c;我这边模拟了一下&#xff0c;是可以建立tcp连接的 你的那个应用我一直没编译成功&#xff0c;你试试吧&#xff0c;应该这样是可以的 另一个同事找到了类似的方法&…

    【华为路由的arp配置】

    华为路由的arp配置 ARP&#xff1a;IP地址与MAC地址的映射。 R1: g0/0/0:10.1.1.254/24 g0/0/1:10.1.2.254/24 PC1: 10.1.1.1/16 PC2: 10.1.1.2/16 PC3: 10.1.2.3/16 动态ARP 查看PC1的arp表&#xff0c;可以看到&#xff0c;列表为空。 查看R1的arp表 在PC3上ping命令测…

    SPDK vhost介绍

    目录 1. vhost技术的背景与动机Virtio 介绍virtio-blk数据路径为例 2. vhost技术的核心原理2.1 vhost-kernel2.2 vhost-user举例 2.3 SPDK vhostvhost的优势IO请求处理数据传输控制链路调整 3. SPDK vhost的实现与配置3.1 环境准备3.2 启动SPDK vhost服务3.3 创建虚拟块设备3.4…

    电容的一些常用数值

    如果是滤高频信号的小电容一般采用100nF 如果是滤低频信号的大电容一般采用10uF(10000nF) 比如这个LDO降压 两个一起用滤波效果会更好 如果想要供电引脚悬空&#xff0c;按理不能悬空&#xff0c;所以应该接大电阻接地&#xff0c;一般采用5.1KΩ 比如这个6Pin USB-TypeC的…

    一个基于Python+Appium的手机自动化项目~~

    本项目通过PythonAppium实现了抖音手机店铺的自动化询价&#xff0c;可以直接输出excel&#xff0c;并带有详细的LOG输出。 1.excel输出效果: 2. LOG效果: 具体文件内容见GitCode&#xff1a; 项目首页 - douyingoods:一个基于Pythonappium的手机自动化项目&#xff0c;实现了…

    (回溯分割)leetcode93 复原IP地址

    #include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; //卡尔的图不是按照程序执行过程而是直接画程序会执行的过程 // 实际执行是&#xff1a;n个字符&#xff0c;递推n1后&#xff08;叶子节点&#xff…

    分子动力学模拟里的术语:leap-frog蛙跳算法和‌Velocity-Verlet算法

    分子动力学模拟&#xff08;Molecular Dynamics Simulation&#xff0c;简称MD&#xff09;是一种基于经典力学原理的计算物理方法&#xff0c;用于模拟原子和分子在给定时间内的运动和相互作用‌。以下是关于分子动力学模拟的一些核心术语和概念&#xff1a; ‌定义系统‌&am…

    智能工厂数字化化集成落地项目(交付版 67页)PPT 解读

    基于工业4.0和工业智能化转型的甲方智能工厂数字化集成落地项目。报告分析了制造业的发展趋势&#xff0c;重点介绍了甲方为应对挑战而实施的商业模式创新和产业升级策略。通过引入乙方的智能工厂规划&#xff0c;构建了一个集成的数字化工厂架构&#xff0c;以提高生产效率和响…

    Linux进度条实现

    Linux进度条实现 1.\r\n2.缓冲区3.缓冲区分类4.进度条实现 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏&#xff1a;【Linux的学习】 &#x1f4dd;&#x1f4dd;本篇内容&#xff1a;\…

    基于java线程池和EasyExcel实现数据异步导入

    基于java线程池和EasyExcel实现数据异步导入 2.代码实现 2.1 controller层 PostMapping("import")public void importExcel(MultipartFile file) throws IOException {importService.importExcelAsync(file);}2.2 service层 Resource private SalariesListener sa…