大数据CSV导入MySQL

news2025/6/9 15:52:55

CSV Import MySQL

    • 源码
    • 主要特性
    • 技术栈
    • 快速开始
      • 1. 环境要求
      • 2. 构建项目
      • 3. 使用方式
        • 交互式模式
        • 命令行模式
        • 编程方式使用
    • 核心组件
      • 1. CsvService
      • 2. DatabaseService
      • 3. CsvImportService
    • 数据类型映射
    • 性能优化
      • 1. 连接池优化
      • 2. 批量操作优化
      • 3. MySQL配置优化
    • 配置说明
      • application.yml配置
    • 错误处理
    • 最佳实践
    • 示例数据

一个高性能的CSV文件导入MySQL数据库的Spring Boot工具,支持自动类型推断、动态建表、流式处理和批量导入。

源码

在这里插入图片描述

https://github.com/ShouZhiDuan/easydo/tree/main/csv-import-mysql

主要特性

  • 🚀 高性能: 使用HikariCP连接池和批量操作,支持大文件快速导入
  • 🧠 智能类型推断: 自动分析CSV数据并推断最适合的MySQL字段类型
  • 📊 动态建表: 根据CSV文件结构自动创建对应的MySQL表
  • 🔄 流式处理: 边读取CSV边插入数据库,内存占用低
  • 📈 批量操作: 支持自定义批次大小的批量插入
  • 🔍 自动索引: 支持指定字段自动创建索引
  • ⚙️ 灵活配置: 支持动态数据库连接配置
  • 🎯 解耦设计: CSV处理和数据库操作完全分离

技术栈

  • Spring Boot 2.7.14
  • Spring JDBC Template
  • HikariCP 连接池
  • Apache Commons CSV
  • MySQL 8.0+
  • Maven

快速开始

1. 环境要求

  • Java 11+
  • Maven 3.6+
  • MySQL 8.0+

2. 构建项目

mvn clean package

3. 使用方式

交互式模式
java -jar target/csv-import-1.0.0.jar --interactive

按提示输入CSV文件路径、数据库连接信息等参数。

命令行模式
java -jar target/csv-import-1.0.0.jar \
  /path/to/data.csv \
  "jdbc:mysql://localhost:3306/testdb" \
  root \
  password \
  "id,user_id,created_date" \
  2000 \
  1000

参数说明:

  • 参数1: CSV文件路径
  • 参数2: MySQL数据库URL
  • 参数3: 数据库用户名
  • 参数4: 数据库密码
  • 参数5: 索引列名(可选,多个用逗号分隔)
  • 参数6: 批次大小(可选,默认1000)
  • 参数7: 样本大小(可选,默认1000)
编程方式使用
@Autowired
private CsvImportService csvImportService;

public void importData() {
    // 配置数据库连接
    DatabaseConfig config = new DatabaseConfig(
        "jdbc:mysql://localhost:3306/testdb",
        "root",
        "password"
    );
    
    // 指定需要创建索引的列
    List<String> indexColumns = Arrays.asList("id", "user_id");
    
    // 执行导入
    csvImportService.importCsv(
        "/path/to/data.csv", 
        config, 
        indexColumns, 
        2000,  // 批次大小
        1000   // 样本大小
    );
    
    // 关闭连接
    csvImportService.closeConnection();
}

核心组件

1. CsvService

负责CSV文件处理:

  • 解析CSV文件头部
  • 数据类型推断
  • 流式数据读取
  • 表名提取

2. DatabaseService

负责数据库操作:

  • 动态创建数据库连接
  • 创建表结构
  • 批量数据插入
  • 创建索引

3. CsvImportService

主要业务逻辑:

  • 整合CSV处理和数据库操作
  • 控制导入流程
  • 错误处理和日志记录

数据类型映射

CSV数据特征推断的Java类型MySQL字段类型
纯整数INTEGERINT
长整数(10位+)LONGBIGINT
小数DOUBLEDOUBLE
true/false/yes/no/1/0BOOLEANBOOLEAN
日期格式DATEDATE
日期时间格式TIMESTAMPTIMESTAMP
其他STRINGVARCHAR/TEXT

性能优化

1. 连接池优化

DatabaseConfig config = new DatabaseConfig(url, username, password);
config.setMaximumPoolSize(50);     // 最大连接数
config.setMinimumIdle(20);         // 最小空闲连接
config.setConnectionTimeout(30000); // 连接超时

2. 批量操作优化

  • 使用rewriteBatchedStatements=true参数
  • 适当增加批次大小(建议1000-10000)
  • 启用预编译语句缓存

3. MySQL配置优化

-- 临时禁用约束检查(导入时)
SET foreign_key_checks = 0;
SET unique_checks = 0;
SET autocommit = 0;

-- 调整缓冲区大小
SET innodb_buffer_pool_size = 1G;
SET bulk_insert_buffer_size = 256M;

配置说明

application.yml配置

csv-import:
  default:
    batch-size: 1000        # 默认批次大小
    sample-size: 1000       # 默认样本大小
    connection-timeout: 30000 # 连接超时时间
    max-pool-size: 20       # 最大连接池大小
    min-idle: 5             # 最小空闲连接数
  
  performance:
    enable-batch-rewrite: true      # 启用批量重写
    enable-prep-stmt-cache: true    # 启用预编译缓存
    prep-stmt-cache-size: 250       # 缓存大小

错误处理

  • 文件不存在: 检查CSV文件路径是否正确
  • 数据库连接失败: 检查数据库URL、用户名、密码
  • 类型转换错误: 工具会自动降级为字符串类型
  • 内存不足: 减少批次大小或增加JVM堆内存

最佳实践

  1. 大文件处理: 使用较大的批次大小(5000-10000)
  2. 类型推断: 增加样本大小提高准确性
  3. 索引策略: 在数据导入完成后创建索引
  4. 连接池: 根据并发需求调整连接池大小
  5. 监控: 关注日志输出,监控导入进度

示例数据

创建测试CSV文件 users.csv

id,name,age,salary,is_active,created_date
1,John Doe,25,50000.50,true,2023-01-01
2,Jane Smith,30,60000.75,false,2023-01-02
3,Bob Johnson,35,70000.00,true,2023-01-03

导入命令:

java -jar csv-import-1.0.0.jar \
  users.csv \
  "jdbc:mysql://localhost:3306/testdb" \
  root \
  password \
  "id,name"

生成的MySQL表结构:

CREATE TABLE `users` (
  `id` INT,
  `name` VARCHAR(255),
  `age` INT,
  `salary` DOUBLE,
  `is_active` BOOLEAN,
  `created_date` DATE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE INDEX `idx_users_id` ON `users` (`id`);
CREATE INDEX `idx_users_name` ON `users` (`name`);

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

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

相关文章

MySQL 索引优化(Explain执行计划) 详细讲解

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 MySQL 索引优化&#xff08;Explain执行计划…

Cad 反应器 cad c#二次开发

在 AutoCAD C# 二次开发中&#xff0c;DocumentCollectionEventHandler 是一个委托&#xff08;delegate&#xff09;&#xff0c;用于处理与 AutoCAD 文档集合&#xff08;DocumentCollection&#xff09;相关的事件。它属于 AutoCAD .NET API 的事件处理机制&#xff0c;本质…

【websocket】安装与使用

websocket安装与使用 1. 介绍2. 安装3. websocketpp常用接口4. Websocketpp使用4.1 服务端4.2 客户端 1. 介绍 WebSocket 是从 HTML5 开始支持的一种网页端和服务端保持长连接的 消息推送机制。 传统的 web 程序都是属于 “一问一答” 的形式&#xff0c;即客户端给服务器发送…

【大模型】LogRAG:基于检索增强生成的半监督日志异常检测

文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构D 实验设计D.1 数据集/评估指标D.2 SOTAD.3 实验结果 E 个人总结E.1 优点E.2 不足 A 论文出处 论文题目&#xff1a;LogRAG: Semi-Supervised Log-based Anomaly Detection with Retrieval-Augmented …

基于SpringBoot实现的大创管理系统设计与实现【源码+文档】

基于SpringBootVue实现的大创管理系统采用前后端分离架构方式&#xff0c;系统设计了管理员、学生、指导老师、院系管理员两种角色&#xff0c;系统实现了用户登录与注册、个人中心、学生管理、指导老师管理、院系管理员管理、优秀项目管理、项目类型管理、项目信息管理、项目申…

国产高云FPGA实现视频采集转UDP以太网输出,FPGA网络摄像头方案,提供2套Gowin工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目国产高云FPGA基础教程国产高云FPGA相关方案推荐我这里已有的以太网方案 3、设计思路框架工程设计原理框图输入Sensor之-->OV7725摄像头输入Sensor之-->OV5640摄…

Webpack依赖

Webpack到底怎么对我们的项目进行打包捏&#xff1f; 在webpack处理应用程序时&#xff0c;会根据命令或者配置文件找到入口文件 从入口开始&#xff0c;会生成一个依赖关系图&#xff0c;这个依赖关系图会包含应用程序中所需的所有模块&#xff08;.js、css文件、图片、字体…

自动驾驶科普(百度Apollo)学习笔记

1. 写在前面 在过去的几年里&#xff0c;自动驾驶技术取得飞速发展&#xff0c;人类社会正逐渐走向一个新时代&#xff0c;这个时代中&#xff0c;汽车不仅仅是一个交通工具&#xff0c;更是一个智能的、能够感知环境、做出决策并自主导航的机器伙伴。现在正好也从事这块的工作…

leetcode_66.加一

题目链接 这道题归类在力扣的数学类中&#xff0c;应该算是一道思维的简单题吧 题是这样的&#xff0c;根据题目我们不难理解&#xff0c;这个题就是在最后一位加 1 然后返回&#xff0c;正如示例所说的那样&#xff0c;当然这很符合我们人的思维&#xff0c;写这种算法题最重要…

iview-admin静态资源js按需加载配置

iview-admin2.0版本默认加载所有组件的JS&#xff0c;实际情况下&#xff0c;用户访问后台并不会每个页面都浏览。这样就会造成流量及带宽的浪费。可通过修改配置文件vue.config.js来实现按需加载&#xff0c;具体配置如图 image © 著作权归作者所有,转载或内容合作请联系…

抖去推--短视频矩阵系统源码开发

一、开发短视频矩阵系统的源码需要以下步骤&#xff1a; 确定系统需求&#xff1a; 根据客户的具体业务目标&#xff0c;明确系统需实现的核心功能模块&#xff0c;例如用户注册登录、视频内容上传与管理、多维度视频浏览与推荐、用户互动&#xff08;评论、点赞、分享&#xf…

Vue部署到Nginx上及问题解决

一、Vue打包 dist文件即打包文件 二、下载Nginx&#xff0c;将dist内容全部复制到Nginx的html下 三、修改Nginx的nginx.conf配置文件&#xff0c;添加try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html; 是 Nginx 配置中的一个重要指令&#xff0c;用于处理…

项目-- Json-Rpc框架

目录 项目简介环境搭建Ubuntu-22.04 第三方库使用JsonCppMuduo基础类EventLoop类TcpConnection类Buffer类TcpClient类TcpServer类 服务端基本搭建客户端基本搭建 future 项目设计通用模块设计Rpc功能模块设计发现者设计提供者设计服务注册中心设计 Topic功夫模块设计主题管理中…

因泰立科技H1X激光雷达:因泰立科技为智慧工业注入新动力

在当今工业领域&#xff0c;精准测量与高效作业是推动产业升级的关键因素。因泰立科技推出的H1X三维轮廓扫描激光雷达&#xff0c;凭借其卓越的性能和广泛的应用场景&#xff0c;正成为智慧工业中不可或缺的高科技装备。 产品简介 H1X三维轮廓扫描激光雷达是因泰立科技基于二维…

python:Tkinter 开发邮件客户端,能编写邮件,发送邮件带附件

Python Tkinter 邮件客户端 下面是一个使用 Python Tkinter 开发的简单邮件客户端&#xff0c;支持编写邮件和发送邮件功能&#xff1a; 功能说明 这个邮件客户端包含以下功能&#xff1a; 邮件编写功能&#xff1a; 收件人地址输入抄送地址输入邮件主题输入邮件正文编辑区&…

深入解析Java21核心新特性(虚拟线程,分代 ZGC,记录模式模式匹配增强)

文章目录 前言一、虚拟线程 (Virtual Threads - JEP 444) - 并发的革命1.1 解决的核心问题&#x1f3af;1.2 工作原理与核心机制⚙️1.3 使用详解与最佳实践&#x1f6e0;️1.4 注意事项⚠️1.5 总结 &#x1f4da; 二、分代 ZGC (Generational ZGC - JEP 439) - 低延迟新高度2…

免费批量去水印工具 - 针对文心一言生成图片

免费批量去水印工具 - 针对文心一言生成图片 工具介绍 这是一款免费的批量去水印工具&#xff0c;专门针对文心一言生成的图片进行处理。通过简单的操作&#xff0c;您可以快速去除图片中的水印。 下载链接 您可以通过以下网盘链接下载工具&#xff1a; 链接: https://pa…

在WPS中如何启用宏VBA wps.vba.exe下载和安装

首先我们点击导航栏中的【工具】&#xff0c;点击左侧 运行宏&#xff0c;根据提示 点击 立即加载。加载卡在50%时间比较长&#xff0c;耐心等待。 关闭wps重新打开后&#xff0c; word和xls表格都可以使用了。 如果电脑无法联网&#xff0c;需要提前下载 WPS VBA插件 WPS VB…

Hardware-Efficient Attention for Fast Decoding

TL;DR 2025 年普林斯顿大学提出的硬件友好 attention 设计&#xff0c;在 MQA/GQA 与 deepseek 提出的 MLA 基础之上继续优化&#xff0c;提出 Grouped-Tied Attention (GTA) 和 Grouped Latent Attention (GLA)&#xff0c;实现更高推理效率的同时也能保持较好的模型效果。 …

LLMs 系列科普文(13)

十三、AlphaGO 提到强化学习的历史&#xff0c;不得不提到 alphago&#xff0c;如果你不记得这是什么了&#xff0c;那你是否还曾记得&#xff0c;早些年 AI 已经可以在围棋中击败人类选手了。 AlphaGO 系统又 DeepMind 公司开发&#xff0c;你可以在网络上找到当初人机大战的…