java如何读取1千万级别的数据
来源:互联网 发布:我想开淘宝网店怎么开 编辑:程序博客网 时间:2024/05/17 01:44
如果数据很庞大的情况,估计没有人会直接使用
select * from table ;select * from table limit 1000000;
之类的SQL语句,这样的操作别说数据库的操作很慢了,在网络IO传输也是一个很大的问题,
把一千万的数据读取出来在网络进行传输,这样性能消耗也会有瓶颈。
所以,读取大批量的数据一般都是采用分批次的读取方式。
(一)通过测试,一万条数据一次性读取出来所花费的时间要比分十次,每次读1千数据的速度要慢很多。
从上面的两张截图可以看出,执行limit1000的时候,所用的时间是0.095s,读十次,顶多也不到1s。
但是,执行limit 10000的时候,所用的时间是2.747s。差不多是3倍的时间。
(二),主键是uuid,可以进行排序,利用排序和比较值的大小来分批读取数据。
SELECT * FROM `kw_seo_keyword` as tWHERE t.id > '31baf874-0fc5-4bb0-82ff-7bc77c6b63f5'ORDER BY t.idLIMIT 1000
每一次,读取一千条数据,然后取这一千条数据的有序集合的最后一条数据的id,在进行大小的比较。如此反复,直到数据读取完为止。
(三),安全性的考虑,执行上千万的数据,有时候程序出现异常,结果修改异常后再重新这上千万的数据,那就太蛋疼了。所以我们分批次处理数据的时候。
比如说,我们每次读取一千条数据,等集合的数据超过100万的时候,就处理数据,然后通过一个redis的key来保存最后一次的id。
while (!isFinish) { try { while (true) { queryMap.put("id", id); tempSeoKeywordList = seoKeywordMapper.getUnAggregateCharactWords(queryMap); if (tempSeoKeywordList == null || tempSeoKeywordList.size() == 0) { isFinish = true; break; } for (SeoKeyword seoKeyword : tempSeoKeywordList) { crawlerKeyword = new CrawlerKeyword(); crawlerKeyword.setKeywordId(seoKeyword.getId()); crawlerKeyword.setKeyword(seoKeyword.getKeyword()); crawlerKeyword.setPageNumber(1); seoKeywordList.add(crawlerKeyword); } id = tempSeoKeywordList.get(tempSeoKeywordList.size() - 1).getId(); if (seoKeywordList.size() == 1000000) break; } if (seoKeywordList.size() != 0) { CrawlingTask crawlingTask = new CrawlingTask().setTaskId(StringUtil.uuid()).setProtos(seoKeywordList); TaskDirector.submitTask(QueueClientHelper.queue_kw_wapbaidu_agg, crawlingTask); redisUtil.set(RedisKey.Prefix.LAST_COMPLETE_AGG_ID, ((CrawlerKeyword) seoKeywordList.get(seoKeywordList.size() - 1)).getKeywordId()); seoKeywordList.clear(); } } catch (Exception e) { isFinish = true; logger.info("聚合特征词扔到爬虫队列任务执行失败------"); e.printStackTrace(); } }
附上,最近做的项目的代码作为例子。
0 0
- java如何读取1千万级别的数据
- 千万级别的数据存储
- 怎样玩转千万级别的数据
- 怎样玩转千万级别的数据
- 玩转千万级别的数据(一)
- 怎样玩转千万级别的数据
- 怎的玩转千万级别的数据
- 怎样玩转千万级别的数据
- 插入千万级别的Mysql数据
- java写出大数据(千万级别)的excel探索(一)
- java写出大数据(千万级别)的excel探索(二)
- java千万级别数据生成文件思路和优化
- java千万级别数据生成文件思路和优化
- java千万级别数据生成文件思路和优化
- java千万级别数据生成文件思路和优化
- java千万级别数据生成文件思路和优化
- java千万级别数据生成文件思路和优化
- 玩转千万级别的数据(二)
- 【BZOJ 1005】[HNOI2008]明明的烦恼(化简的另一种方法)
- 测试用例实例--常见功能测试点
- 树莓派3 centos7 1611 扩容内存卡。
- Android 应用适配 Android 7.0 权限要求
- ibatis 返回list<string> 集合 (有效)
- java如何读取1千万级别的数据
- java8系列之Optional
- 用伸缩布局实现日历展示
- JavaScript Demo---最简单的菜单切换效果
- oj2410: 求n以内奇数的平方和【简单循环】
- 查看linux中某个端口(port)是否被占用
- (13)稀疏矩阵的压缩-三元组表(转置)
- 【MFC】非模态对话框
- 学习D3 ——创建一个完整的柱形图