Dan*_*iel 6 linux multi-core sort
我正在寻找高性能的 /bin/sort 替代品。我知道有 pbzip2 可以使用多核,但是 /bin/sort 有类似的产品吗?
我找到了 distsort.sh,但我想要一些不那么 IO 密集的东西。我正在寻找排序哦.. 60 演出数据非常频繁。
嗯。我想你会在这里遇到一些问题。首先,您的输入数据将对排序性能产生很大影响(不同算法的性能更好或更差取决于输入的分布)。然而,一个更大的问题是 60GB 是大量数据。
此外,排序不像压缩那样容易并行化,因为没有邻近性保证。换句话说,通过压缩/解压缩,您可以将输入分成离散的块,并分别独立地对它们进行操作。处理完每个块后,它们会简单地连接在一起。通过排序,您涉及多个步骤,因为您不能仅仅连接结果(除非您进行一些预处理),您必须合并结果(因为 60GB 开头的条目可能会与条目相邻在 60GB 的末尾,排序后)。
我基本上可以在这里想到一些通用的解决方案:
在不了解更多关于你的数据和你正在做的事情的细节的情况下,这是我能提供的最好的建议。
[注意:我不是排序方面的专家,所以比我更聪明的人可能会指出我逻辑中的错误,或改进这些错误的建议。]
GNUsort有 -m 可能可以帮助你。假设您有 200 个 .gz 文件需要排序和合并。然后你可以使用 GNU Parallel 来执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
如果 I/O 是问题而内存不是问题,则首先使用 -Ssort以确保所有内容都保留在内存中。此外,您可能希望lzop每次写入磁盘时都使用 (--compress-program=lzop):磁盘通常是限制因素,因此即时 lzopping 可以为您提供额外的速度。或者您可以制作一个 RAM 磁盘并将 -T 设置为该目录。
编辑2023
其中一些想法现在已经成为 的一部分parsort,也比上面的经过了更好的测试。
| 归档时间: |
|
| 查看次数: |
3017 次 |
| 最近记录: |