Я использую сортировку слиянием Linux (sort -m) для сортировки большой группы предварительно отсортированных файлов. Я предполагал, что сортировка слиянием будет значительно быстрее полной сортировки на несортированных данных, но это не то, что я вижу. Например, если я выполняю полную сортировку на 1000 файлах, содержащих 10000 строк несортированных данных:
/bin/time -o ./full_sort.time -v sort --parallel 8 -k1,1g ./data/unsorted/f* > /dev/null
Я вижу следующее время:
User time (seconds): 104.70
System time (seconds): 0.71
Percent of CPU this job got: 440%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:23.90
Теперь, если я предварительно отсортирую данные и запущу точно такую же сортировку, вызвав опцию -m:
/bin/time -o ./merge_sort.time -v sort --parallel 8 -k1,1g -m ./data/presorted/f* > /dev/null
Я вижу эти времена:
User time (seconds): 59.34
System time (seconds): 2.15
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 1:01.60
Время сортировки слиянием на самом деле составляетпомедленнеечем полная сортировка! Опять же, я ожидал, что сортировка слиянием будет значительно быстрее, поскольку каждый входной файл в наборе данных предварительно отсортирован, и осталось выполнить только шаг слияния. Должно быть, я что-то упускаю. Может кто-нибудь объяснить, что я делаю неправильно?
Спасибо, JCS