没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
MySql 快速插入千万级大数据的方法示例快速插入千万级大数据的方法示例
主要介绍了MySql 快速插入千万级大数据的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者
工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在数据分析领域,数据库是我们的好帮手。不仅可以接受我们的查询时间,还可以在这基础上做进一步分析。所以,我们必然
要在数据库插入数据。在实际应用中,我们经常遇到千万级,甚至更大的数据量。如果没有一个快速的插入方法,则会事倍功
半,花费大量的时间。
在参加阿里的天池大数据算法竞赛中(流行音乐趋势预测),我遇到了这样的问题,在没有优化数据库查询及插入之前,我花
了不少冤枉时间,没有优化之前,1500万条数据,光插入操作就花费了不可思议的12个小时以上(使用最基本的逐条插
入)。这也促使我思考怎样优化数据库插入及查询操作,提高效率。
在不断优化过程中,性能有大幅提升。在按时间序列从数据库查询并汇总生成2万6000多首歌曲的下载,播放,收藏数过程
中,通过查询生成的操作速度提高从预估的40多小时降低到一小时多。在数据库插入方面,性能得到大幅提升;在新的数据
集上测试,5490万+的数据,20分钟完成了插入。下面分享一下我的心得。
优化过程分为2步。第一步,实验静态reader从CSV文件读取数据,达到一定量时,开始多线程插入数据库程序;第二步,使
用mysq批量插入操作。
第一步,读取文件,开始插入多线程第一步,读取文件,开始插入多线程
在这里,达到一定量的量是个需要斟酌的问题,在我的实验中,开始使用100w作为这个量,但是出现了新的问题,Java 堆内
存溢出,最终采用了10W作为量的标准。
当然,可以有其他的量,看大家自己喜欢那个了。
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import preprocess.ImportDataBase;
public class MuiltThreadImportDB {
/**
* Java多线程读大文件并入库
*
* @param args
*/
private static int m_record = 99999;
private static BufferedReader br = null;
private ArrayList<String> list;
private static int m_thread = 0;
static {
try {
br = new BufferedReader(
new FileReader(
"E:/tianci/IJCAI15 Data/data_format1/user_log_format1.csv"),8192);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
br.readLine(); // 去掉CSV Header
} catch (IOException e) {
e.printStackTrace();
}
}
public void start() {
String line;
int count = 0;
list = new ArrayList<String>(m_record + 1);
synchronized (br) {
try {
while ((line = br.readLine()) != null) {
if (count < m_record) {
list.add(line);
count++;
} else {
list.add(line);
count = 0;
资源评论
weixin_38531017
- 粉丝: 8
- 资源: 917
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功