「java几十万数据入库」java几十万数据入库要多久
本篇文章给大家谈谈java几十万数据入库,以及java几十万数据入库要多久对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java中如何将几万条数据解析存表
- 2、java 从几十万条数据的list集合中随机取出1000个元素重新生成集合?
- 3、请问用java怎么把大量数据入库到一张表,数据量一次有10万条,数据库sybase, 还要拿到成功入库的条数
- 4、java 怎么把5万条数据分批插入数据到mysql,之前插1,2万没事, 多了就内存溢出
- 5、java 把list中有几十万的数据怎么快速更新到数据库
- 6、java如何快速处理大数据
java中如何将几万条数据解析存表
把UNIX日志数据文件,解析成对象,传输到服务器并保存在oracle数据库。难点在数据文件格式的研究,其它的就比如把大象装冰箱里,哈哈。希望对你有帮助
读取文件,如果是数据文件比较麻烦,因为需要把二进制解析成String或int等。
a. 事先需要知道数据文件的格式(每个多少字节是个什么字段,每个多少字节是个完整对象)。
b.用RandomAccesFile读取数据文件,跟常用IO流的区别是,它的seek()方法能方便在文件中定位。比如从第n个字节开始读16个字节,是个int型,表示日期。
c. 每读取一个数据,解析成int、String等类型,存入下面POJO类的对应属性中。
d. 循环直到文件结束。
新建POJO类,用来存放解析出来的数据。
要求POPO对象的属性与数据库表字段一一对应。
将POJO对象持久化到数据库表中。
用jdbc就可以,一条insert语句。需要的话其它OR框架如hibernate也可。
java 从几十万条数据的list集合中随机取出1000个元素重新生成集合?
ListString list = new ArrayListString();
ListString new_list = new ArrayListString();
for (int i = 0 ; i 1200000;i++)
{
list.add(i+"");
}
long time1 = System.currentTimeMillis();
Collections.shuffle(list);
new_list = list.subList(0,1000);//方法1耗时65~130
new_list = createRandomList(list,1000);//方法2耗时2~5
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
private static List createRandomList(List list, int n)
{
Map map = new HashMap();
List listNew = new ArrayList();
if (list.size() = n)
{
return list;
}
else
{
while (map.size() n)
{
int random = (int) (Math.random() * list.size());
if (!map.containsKey(random))
{
map.put(random, "");
listNew.add(list.get(random));
}
}
return listNew;
}
}
这个方法测试
请问用java怎么把大量数据入库到一张表,数据量一次有10万条,数据库sybase, 还要拿到成功入库的条数
批量处理
每10000条(根据机器内存情况调整)循环一次
使用hibernate的session对10000条数据进行循环,每50条刷新一次
配置hibernate sql批量提交的条目数,设置成50
我数据库用的是db2,10万条效率还算可以
java 怎么把5万条数据分批插入数据到mysql,之前插1,2万没事, 多了就内存溢出
你的事务控制问题。
大量数据插入的时候,可以将数据量分批,每次事务提交一批。
例如:
con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
Statement stmt = conn.createStatement();
// 第一批 省略n条
stmt.addBatch("insert into dept values (52,'a','aa')");
stmt.addBatch("insert into dept values (53,'b','bb')");
stmt.addBatch("insert into dept values (54,'c','cc')");
stmt.executeBatch();
con.commit();//提交JDBC事务
stmt.close();
// 第二批 省略n条
stmt = conn.createStatement();
stmt.addBatch("insert into dept values (52,'a','aa')");
stmt.addBatch("insert into dept values (53,'b','bb')");
stmt.addBatch("insert into dept values (54,'c','cc')");
stmt.executeBatch();
con.commit();//提交JDBC事务
stmt.close();
// 第n批
。。。。。。
con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式
conn.close();
java 把list中有几十万的数据怎么快速更新到数据库
Java7 自带 fork-join,建议使用fork-join,在高大上一点儿可以使用hadoop的mapreduce
java如何快速处理大数据
文件读取:首先是一个文件上传,数据入库,10-200万条不等,这里主要考虑到一次性读取,JVM分配出来的栈内存不一定会够(个人对内存这一块还是处于一知半解的状态,所以比较谨慎,若诸位大神有好的认知,希望评论留下地址分享一下),是依行读取数据,设定一个批量值,当读取的数据达到一定量之后,执行批量入库操作,清空集合,再接着读取。
//读取文件内容
while((s = br.readLine())!=null){
//判断是否达到单次处理量
if(num%leadingNum==0num!=0){
int a = stencDao.insertBatch(listBean);
if(a!=leadingNum){
flag = false;
}
//清空集合
listBean.clear();
}
String value = s.trim();
//将读取到的内容放入集合中
if(!value.equals("")){
StencilCustomer bean = new StencilCustomer();
bean.setCustomerPhone(value);
bean.setLinkStencilId(id);
listBean.add(bean);
num ++;
}
}
数据处理:这里的思路也是将数据小化然后处理,这里使用了多线程,设定单个线程处理量,然后开启多个线程处理,这里需要考虑你的服务器的承载能力,如果线程开得太多了,处理不过来,会出现蹦死的情况。例如200万数据,我开了20个线程,单个线程处理600条。
//建立一个线程池 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
minTaskNumber, maxTaskNumber, 3L, TimeUnit.SECONDS,
new ArrayBlockingQueueRunnable(minTaskNumber),
new ThreadPoolExecutor.DiscardOldestPolicy());
//当正在执行的线程数达到最大执行线程数的时候等待
boolean flag = true;
while(flag){
Thread.sleep(1000);//休眠2ms查询一次
int c = threadPool.getActiveCount();//线程池中活动中的线程数量
if(cmaxTaskNumber){
flag = false;
}
}
上面的代码是我对线程池的一个控制,控制服务器一直最大线程执行,Thread.sleep(1000);用while的时候,这个休眠最好不要去掉,去掉之后很影响执行效率
关于java几十万数据入库和java几十万数据入库要多久的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-11,除非注明,否则均为
原创文章,转载请注明出处。