背景:读取10G csv文件,然后 根据交易种类分分组,找出每个交易种类的交易最大值,最后给出最大的那个交易信息。
难点:最主要的是怎么快速读文件?
涉及的功能点:MappedByteBuffer 读文件方式、异步返回处理、treeset排序、线程池处理、分段切割排序
处理方式:
1,使用 MappedByteBuffer 读文件 。这里最主要是怎么提取csv中需要的列,怎么划分行,很麻烦(根据\r 字符识别换行,根据,逗号识别列)(漏洞:这里没有处理切割临界数据,太麻烦了)
2,多线程分块读取 (可以分块读取的前提是:可以指定文件内容下标读取)
3,把所有文件放到集合中
4,分组处理,异步 在每个分组中找出最大值(如果每个组的数据很多,那么且是单向比较,可以分段找出最大值)
5,最终比较每个分组的最大值。就是最终结果
MappedByteBuffer 可以先获取文件内容的总长度,然后根据机器线程处理核数,把文件分割成对应的核数个数。然后在各自的线程中做单线程处理。
这样就是最快的。重复利用了机器的处理能力。
线程的数量不能多,否则即使多了,只会徒增线程切换带来的消耗,而不能提高性能。
核心代码:
public static voi
订阅专栏 解锁全文
8867

被折叠的 条评论
为什么被折叠?



