我有一个非常大的CSV文件(1GB +),它有100,000行.
我需要编写一个Java程序来解析CSV文件中的每一行,以便为发送的HTTP请求创建一个主体.
换句话说,我需要发送100,000个HTTP请求,这些请求对应于CSV文件中的行.如果我在一个线程中执行这些操作将会很长.
我想创建1,000个线程来执行i)从CSV文件中读取一行,ii)创建一个HTTP请求,其主体包含读取行的内容,以及iii)发送HTTP请求并接收响应.
这样,我需要将CSV文件拆分为1,000个块,并且这些块之间应该没有重叠的行.
这种分裂程序的最佳方法是什么?
das*_*ght 10
同时在多个位置读取单个文件不会让你走得更快(但它可能会大大减慢你的速度).
不是从多个线程读取文件,而是从单个线程读取文件,并并行处理这些行.单线应该逐行读取CSV,并将每一行放入队列中.然后,多个工作线程应从队列中获取下一行,解析它,转换为请求,并根据需要同时处理请求.然后,通过单个线程完成工作的拆分,确保没有缺失的线或重叠.
您可以拥有一个读取CSV行的线程并构建一个读取的行列表.当达到某个限制时,例如100行,将其传递给固定大小的线程池以作为请求发送.
我怀疑除非您的服务器有1000个内核,否则您可能会发现使用10-100个并发请求的速度更快.
归档时间: |
|
查看次数: |
10116 次 |
最近记录: |