需要高性能/ bin /sorting; 有什么build议么?

我正在寻找一个高性能/箱/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:

  • 以对sorting和重组友好的方式对数据进行预分区。 例如,如果您正在进行简单的字母sorting,则可以将数据存储在26个存储桶中,每个字母的一个字母一个。 然后,您可以分别对每个桶进行sorting,并在最后重新组合它们。 您如何预分配数据的具体细节将取决于数据本身,您当前的存储方法等。有些设置可能比其他设置更好。
  • 写你自己的sorting前端,基本上是我写的上面,但在飞行。 换句话说,你需要一个脚本来读取input,并且基于一些非常快速的操作(比如读取第一个字母,或者对你的数据有效),然后将这些数据分发到合适的分类桶中。 每种sorting都是独立运行的,直到所有的数据都被处理完毕,然后再把它们合并在一起。 这实际上非常类似于使用MapReduce进行sorting的特殊情况。
  • 使用基于MapReduce的sorting解决scheme。 有一个名为Hadoop的开源项目,它提供了一堆子项目,其中一个是开源的MapReduce实现。 我从来没有使用它,但是,只是读了一下。 我不知道这是否适用于您的特定问题。
  • 你可以索引的数据,然后就这样sorting? sorting键的整个60GB部分? 还是有一小部分,你正在sorting,然后一堆额外的数据每一块? 如果是后者,索引和sorting某种关键值,然后根据需要查找附加数据可能是要走的路。
  • 也许你可以完全预先sorting你的数据,并保持它在一个sorting的状态。 每次添加或更新数据时,都可以从sorting的angular度对其进行更正。 这个解决scheme将高度依赖于如何存储数据,以及sorting更新对性能的影响是否可以接受。
  • 最后,你可以把所有的东西都踢出去。 将数据转储到RDBMS(我自己喜欢PostgresSQL),让数据库为您处理您的sorting。

不知道更多关于你的数据和你正在做什么的细节,这是我可以提供的最好的build议。

[注意:我不是sorting专家,所以比我聪明的人可能会指出我的逻辑错误,或有改进的build议。]

在四处search时,我发现了许多学术论文和一个名为Nsort的商业产品。 除了他们的网站声称:

Nsort是一个sorting/合并程序,可以使用大量的处理器和磁盘并行快速sorting大量的数据。 独特的CPU效率,Nsort是唯一的商业sorting程序来演示:

  • 1千兆字节(33分钟)
  • 1千兆字节/秒的文件读写速率

Nsort在分拣大量生产数据集方面有着悠久的历史,例如:

  • 高stream量网站的Web日志
  • 电话logging
  • 政府机构数据

Perl?

编辑:那么,这篇文章是关于Perlsortingperf tunning。 从我所能理解的内容来看,它基本上是更好的实践指南,比较糟糕的sorting代码如何让你的程序变得非常慢,反之亦然,如何使它更快。

马虎编程,马虎performance。