java高性能处理10G大文件

背景:读取10G csv文件,然后 根据交易种类分分组,找出每个交易种类的交易最大值,最后给出最大的那个交易信息。

难点:最主要的是怎么快速读文件?

涉及的功能点:MappedByteBuffer 读文件方式、异步返回处理、treeset排序、线程池处理、分段切割排序

处理方式:

1,使用 MappedByteBuffer 读文件 。这里最主要是怎么提取csv中需要的列,怎么划分行,很麻烦(根据\r 字符识别换行,根据,逗号识别列)(漏洞:这里没有处理切割临界数据,太麻烦了

2,多线程分块读取  (可以分块读取的前提是:可以指定文件内容下标读取)

3,把所有文件放到集合中

4,分组处理,异步 在每个分组中找出最大值(如果每个组的数据很多,那么且是单向比较,可以分段找出最大值)

5,最终比较每个分组的最大值。就是最终结果

MappedByteBuffer 可以先获取文件内容的总长度,然后根据机器线程处理核数,把文件分割成对应的核数个数。然后在各自的线程中做单线程处理。

这样就是最快的。重复利用了机器的处理能力。

线程的数量不能多,否则即使多了,只会徒增线程切换带来的消耗,而不能提高性能。

核心代码:

public static voi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老马识途2.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值