我正在寻找一个高性能/箱/sorting下降更换。 我知道有使用多个核心的pbzip2,但有没有类似的产品/ bin / sort?
我find了distsort.sh,但我想要更less的IO密集。 我正在寻找sorting哦..非常频繁的60个演出数据。
GNU sort有-m这可能可以帮助你。 让我们假设你有200个.gz文件,你想要sorting和组合。 那么你可以使用GNU并行来做:
seq 1 200 | parallel mkfifo /tmp/{} ls *.gz | nice parallel -j200 'zcat {} | sort >/tmp/$PARALLEL_SEQ' & seq 1 200 | parallel -X sort -m /tmp/{} >/tmp/sorted
如果I / O是问题,内存不是问题,则首先使用-S来确保所有内容都保留在内存中。 你也可能想在每次写入磁盘时使用lzop (–compress-program = lzop):磁盘通常是限制因素,所以在飞行中可以给你额外的速度。 或者你可以制作一个RAM磁盘并将-T设置为该目录。
人力资源pipe理。 我想,你会在这里遇到几个问题。 首先,你的input数据将对sorting性能有很大的影响(根据input的分布,不同的algorithmperformance更好或更差)。 但是,更大的问题就是60GB是很多数据。
此外,sorting不像压缩一样简单,因为没有接近性保证。 换句话说,通过压缩/解压缩,可以将input分解为不连续的块,并分别独立地对其进行操作。 每个块被处理后,它们被简单地连接在一起。 对于sorting,你有多个步骤,因为你不能只是连接结果(除非你做一些预处理),你必须合并结果(因为在60GB开始的条目可能最终邻近一个条目在60GB的末尾,在sorting之后)。
我基本上可以想到这里的几个一般解决scheme:
不知道更多关于你的数据和你正在做什么的细节,这是我可以提供的最好的build议。
[注意:我不是sorting专家,所以比我聪明的人可能会指出我的逻辑错误,或有改进的build议。]
在四处search时,我发现了许多学术论文和一个名为Nsort的商业产品。 除了他们的网站声称:
Nsort是一个sorting/合并程序,可以使用大量的处理器和磁盘并行快速sorting大量的数据。 独特的CPU效率,Nsort是唯一的商业sorting程序来演示:
- 1千兆字节(33分钟)
- 1千兆字节/秒的文件读写速率
Nsort在分拣大量生产数据集方面有着悠久的历史,例如:
- 高stream量网站的Web日志
- 电话logging
- 政府机构数据
Perl?
编辑:那么,这篇文章是关于Perlsortingperf tunning。 从我所能理解的内容来看,它基本上是更好的实践指南,比较糟糕的sorting代码如何让你的程序变得非常慢,反之亦然,如何使它更快。
马虎编程,马虎performance。