SpringBoot+Mybatis多数据源实战:TDengine与MySQL混合查询优化方案

1. 为什么我们需要TDengine+MySQL的混合架构?

如果你正在开发一个物联网项目,比如智能工厂的设备监控、智慧农业的传感器网络,或者车联网的数据平台,那你肯定遇到过这个头疼的问题:数据量太大了,而且长得还不太一样。我做了这么多年物联网项目,发现大家最纠结的就是怎么存数据、怎么查数据。业务数据,比如用户信息、设备档案、订单记录,用MySQL这种关系型数据库来存,那是天经地义,增删改查都方便,事务支持也好。但那些源源不断涌进来的传感器数据,温度、湿度、位置、电压,每秒可能产生成千上万条,而且主要是写和查,很少去改和删,这种数据塞进MySQL,时间一长,单表几千万甚至上亿条,查个当天的数据都要等好几秒,系统能不卡吗?

我见过一个真实的案例,一个环境监测系统,几千个传感器每分钟上报一次数据。一年下来,MySQL里一张表就堆了二十多亿条记录。前端页面想查某个设备最近24小时的数据曲线,那个查询进度条转得人心慌,用户体验极差。更别提那种需要跨设备、跨时间范围做聚合分析的场景了,数据库服务器CPU直接飙满,搞不好整个服务都挂掉。这时候,时序数据库(TSDB)的优势就体现出来了。TDengine就是专门为这种场景设计的,它用“一个设备一张表”或者“一类设备一张表”的超级表模型,把数据按时间和设备天然地分区存储。查询时,它可以直接定位到具体设备的子表,效率极高,面对海量时间序列数据,查询速度能比MySQL快几十甚至上百倍。

但是,我们不可能把所有的数据都搬到TDengine里。用户管理、权限配置、设备元信息这些强关联、需要复杂事务的业务数据,还是得放在MySQL里。这就带来了一个很现实的需求:我们的Java应用,也就是那个SpringBoot服务,需要同时连接两个数据库,并且能根据业务逻辑,灵活地从不同的库里去读写数据。你可能会想,那我启动两个服务,一个连MySQL,一个连TDengine,不就行了?理论上可以,但在资源紧张的服务器上(比如很多小公司用的2核4G或4核8G的云服务器),跑两个Java应用,内存占用翻倍,部署和维护成本也上去了。最经济、最优雅的方案,就是在一个SpringBoot应用里,通过配置多数据源,同时驾驭MySQL和TDengine。这就是我们今天要聊的实战方案的核心价值:用一套代码,一个服务进程,搞定两种截然不同的数据库,让它们各司其职,发挥最大效能。

2. 项目搭建与环境准备

2.1 依赖引入与关键配置

万事开头难,我们先从项目的“地基”——pom.xml开始。这里面的依赖项一个都不能错,特别是TDengine的JDBC驱动,版本要对得上你的TDengine服务端。

<dependencies>
    <!-- SpringBoot Web基础 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Mybatis整合SpringBoot -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.2</version> <!-- 注意版本与SpringBoot匹配 -->
    </dependency>
    <!-- 分页神器PageHelper -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.4.1</version>
    </dependency>
    <!-- TDengine官方JDBC驱动 -->
    <dependency>
        <groupId>com.taosdata.jdbc</groupId>
        <artifactId>taos-jdbcdriver</artifactId>
        <version>3.2.8</version> <!-- 请务必与服务器版本一致 -->
    </dependency>
    <!-- MySQL驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!-- 数据库连接池(这里用HikariCP,SpringBoot默认) -->
    <!-- 如果想用Druid,可以引入下面的依赖并调整配置 -->
    <!--
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.16</version>
    </dependency>
    -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

这里有个小坑我踩过:TDengine的JDBC驱动版本(比如3.2.8)一定要和服务器上安装的TDengine版本兼容。如果不确定,可以去TDengine的官方GitHub仓库查看版本对应关系。用错了版本,连接的时候会报一些莫名其妙的错误。

接下来是application.yml(我喜欢用yml,比properties更清晰)。这里我们要配置两套数据源,分别指向MySQL和TDengine。

server:
  port: 8080

spring:
  datasource:
    # MySQL 数据源配置
    mysql:
      jdbc-url: jdbc:mysql://你的MySQL地址:3306/你的业务数据库?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
      username: 你的用户名
      password: 你的密码
      driver-class-name: com.mysql.cj.jdbc.Driver
      hikari:
        connection-timeout: 30000
        maximum-pool-size: 10
        minimum-idle: 5
    # TDengine 数据源配置
    taos:
      jdbc-url: jdbc:TAOS://你的TDengine地址:6030/你的时序数据库?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8
      username: root
      password: taosdata # 默认密码,生产环境一定要改!
      driver-class-name: com.taosdata.jdbc.TSDBDriver
      hikari:
        connection-timeout: 30000
        maximum-pool-size: 15 # TDengine查询可能更频繁,连接池可以稍大
        minimum-idle: 5

# MyBatis配置
mybatis:
  # 注意:这里配置的type-aliases-package和mapper-locations是全局默认的。
  # 在多数据源场景下,我们通常会在各自的配置类里单独指定,所以这里可以不配,或者配一个公共的。
  # 如果配置了,要确保不会引起冲突。
  type-aliases-package: com.yourdomain.data.domain
  configuration:
    map-underscore-to-camel-case: true # 下划线转驼峰,强烈建议开启

# PageHelper分页插件配置
pagehelper:
  helper-dialect: mysql # 默认方言,对于TDengine的分页需要特殊处理,后面会讲
  reasonable: true
  support-methods-arguments: tr
内容概要:本文档聚焦于“含分布式电源的配电网可靠性评估研究”,提供了完整的Matlab代码实现方案。研究系统地构建了分布式电源接入背景下的配电网可靠性分析模型,涵盖系统故障建模、可靠性指标(如SAIDI、SAIFI、ASAI等)计算方法,并通过Matlab编程实现了高效的仿真评估算法。文档不仅阐述了核心理论数学模型,还展示了具体的程序架构关键函数设计,帮助读者深入理解配电网在新能源接入场景下的运行风险薄弱环节。此外,文档附带大量相关电力系统前沿研究主题,如微电网优化、储能配置、电动汽车调度、构网型变流器控制等,凸显其在现代智能电网研究中的重要地位,并提供网盘链接以获取完整代码仿真模型,便于科研复现工程应用。; 适合人群:具备电力系统基础理论知识Matlab编程能力的高校研究生、科研人员及电力行业工程技术从业者,特别适用于从事配电网规划、分布式能源并网、电力系统可靠性分析及相关领域研究的专业人士。; 使用场景及目标:①开展含分布式电源的配电网可靠性建模仿真分析;②完成学术论文复现、学位论文课题设计或实际工程项目的风险评估;③掌握利用Matlab/Simulink进行电力系统可靠性定量评估的核心方法,提升科研创新能力工程实践水平。; 阅读建议:建议结合文中提供的网盘资源,下载完整的代码模型进行动手实践,优先剖析核心算法逻辑仿真流程,理解不同分布式电源接入位置容量对系统可靠性的影响规律,再进一步拓展至其他类似课题研究,同时注意参考文献引用复现细节,确保研究成果的科学性严谨性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值