SpringBoot结合OceanBase存储股票数据

大漠孤烟直,长河落日圆。

1 前言

前文中已经介绍了 java 使用爬虫的方法获取股票的基本信息和 k 线数据,并且依据此建立了对应的选股模型,但是在分析数据之后需要将获取到的数据进行保存,方便以后进行数据分析和查询。在前文中已经讲述了 OceanBase 数据库的内容, 在本文中将使用 OceanBase 数据库和 mybatis-plus 进行数据的存储。

2 环境准备

首先需要引入 mybatis-plus 依赖,然后添加对应的配置文件。mybatis-plus 是当下很流行的 ORM 框架,基本封装了简单的增删改查方法,对于简单的应用十分适用,另外 mybatis-plus 对于 java8lambda 表达式的支持也非常的友好。

xml 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>

这里我们需要使用的是 hikari 数据库连接池,使用的是 mysql8 的驱动,目前在 springboothikari 已经是默认的数据库连接池,具体的配置如下图所示:

mybatis-plus 的配置完成之后,我们需要创建数据库表结构,根据之前抓取的股票信息,包括股票的基本信息、模型的选择结果等,具体如下图所示:

3 数据抓取与存储

数据的抓取,我们采用定时任务的方式,通过定时任务去调用任务 SnowStockUtils.queryStockList 获取股票信息列表,因为每天都有可能会有新的股票上市,所以在保存数据时,需要判断数据是否存在,如果存在则更新数据,否则就需要更新数据。正常情况下,我们需要先进行一次查询,但是这样操作会多一次 io 操作,这里采用的是在 sql 层面来结解决这个问题,使用 mysqlon duplicate key update 的方式来实现,具体的实现代码如下图所示:

使用该方式可以减少一次数据库的查询操作,通过 mysql 数据库的特性来解决数据保存或者更新的问题。该种方式只是适用于保存的场景,对于部分更新的数据可能会存在问题,比如某些字段可能为空,但是数据库约束不为空的情况。对于这样的情况就会出现保存失败的情况。

通过任务可以先执行股票的基本信息,然后获取股票的 k 线数据,最后调用股票的数据模型进行计算,获取最终的选择结果,最后需要将数据存放在数据库中。

在上文中已经进行了数据的存储,在查询数据时,如果需要加速数据的查询和数据处理,就需要 OceanBase 的并行计算的功能,如下图所示, 添加 /*+parallel(3) */ 即可, 其中的 3 指的是并行数,和数据库的配置有关系。使用 OceanBase 使用一些特殊的语法或者配置,提高数据库的读写性能,这对一些并发业务来说帮助很大,能够大幅提高服务的性能,此外它还提供了强大的数据库迁移工具、数据统计、性能监控等内容,可以说是开发者的福音。

4 总结

在本文中,主要介绍了 mybatis-plus 的配置信息,整合了之前爬虫得到的数据,并且使用了 OceanBase 数据库进行存储,在保存数据时采用了 on duplicate key update 的方式一次执行就解决了保存和更新的问题,在保存数据库信息后,介绍了其分析和查询的方法,这里使用到了 OceanBase 的并行计算的内容。本文中所涉及的代码已经上传至 github, 欢迎大家点赞关注。项目 github 地址 springboot-auth

相关推荐
WZTTMoon13 分钟前
开发中反复查的 Spring Boot 注解,一次性整理到位
java·spring boot·后端
长沙古天乐15 分钟前
Spring Boot应用中配置消费端随服务启动循环消费消息
spring boot·后端·linq
wadesir24 分钟前
掌握 Rust 中的浮点数处理(Rust f64 浮点数与标准库详解)
开发语言·后端·rust
IT_陈寒26 分钟前
React 18新特性实战:这5个Hook组合让我少写50%状态管理代码
前端·人工智能·后端
HashTang27 分钟前
【AI 编程实战】第 1 篇:TRAE SOLO 模式 10 倍速开发商业级全栈小程序
前端·后端·ai编程
czlczl200209251 小时前
SpringBoot中web请求路径匹配的两种风格
java·前端·spring boot
bigdata-rookie1 小时前
Scala 泛型
开发语言·后端·scala
开心猴爷1 小时前
HTTPS Everywhere 时代的抓包挑战,从加密流量解析到底层数据流捕获的全流程方案
后端
Q_Q5110082851 小时前
python+django/flask医药垃圾分类管理系统
spring boot·python·django·flask·node.js·php
卓码软件测评1 小时前
【第三方CNAS软件测试机构:Gatling中的资源监控_实时收集服务器CPU、内存、磁盘I/O和网络指标】
后端·测试工具·测试用例·scala·压力测试