最初的问题是这样的:
你要排序1PB大小的整数,范围从-2 ^ 31~2 ^ 31 - 1(int),你有1024台机器,每个机器有1TB磁盘空间和16GB内存空间。假设磁盘速度为128MB / s(r / w),内存速度为8GB / s(r / w)。 CPU的时间可以忽略。为简单起见,可以忽略网络传输时间。计算所需的近似时间。
我知道外部排序我们可以在大约10小时内对单台机器上的1TB数据进行排序,如下所示:
磁盘访问(2r2w):1T * 4 / 128MB / s = 2 ^ 15秒~9小时
记忆访问:
排序2 ^ 48 64个部分(每个2 ^ 42)的整数大约需要1.3分钟。总共1.4小时
63路合并需要几秒钟,因此被忽略。
但是下一步呢:1024T数据的组合?我不知道这是如何计算的。那么有什么帮助吗?
答案 0 :(得分:1)
2 ^ 31 = 20亿(2“千兆”)。因此,您正在查看大量重复数字和固定范围。因此,请考虑Radix排序(http://en.wikipedia.org/wiki/Radix_sort)。
每个处理器,对于子数据数据)创建'count'数组(x [0]包含0的计数等)。然后,您可以将所有结果合并到一个数组中。稍后您可以“构造”已排序的数组。