如何快速保存数量有380K之多的条目到MySQL?

banq 16-09-28
    

假设你有380k个Java对象在内存中,你如何更快地将它们持久化保存到MySQL中?

首先想到的办法使用普通SQL通过JDBC保存,据测试通过Spring JDBC保存所有对象插入到数据库MySQL需要6分钟。

另外一个方案是使用“LOAD DATA INFILE”:
MySQL有LOAD DATA INFILE语句能让你非常快地从一个文件中加载大量数据然后保存到指定的数据表中。

第一步首先将内存中Java对象保存到磁盘上的CSV文件,第二步使用 LOAD DATA INFILE导入MySQL。

案例语句:

String sql = "LOAD DATA LOCAL INFILE '" + dataFilepath + "' into table " + tableName + " COLUMNS TERMINATED BY '" + INFILE_COLUMN_SEPARATION_CHAR + "' "; jdbcTemplate.execute(sql);

解释如下:
dataFilepath: 代表保存数据文件路径

tableName: 需要插入数据的表名

INFILE_COLUMN_SEPARATION_CHAR: 数据文件中分隔符号,CSV是",".

使用CSV文件导入380K条目到MySQL中需要3秒。

How to Quickly Load 380K Items Into MySQL - DZone

    

5