Двухходовая многоходовая сортировка слиянием? - PullRequest
3 голосов
/ 21 мая 2009

Если у меня есть отношение (SQL), которое не помещается в памяти, и я хочу отсортировать отношение, используя TPMMS (метод двухпроходной многофакторной сортировки слиянием). Как бы я разделил таблицу на дополнительные таблицы (и сколько), которые могут поместиться в памяти и чем объединить их? Допустим, я использую C #.

1 Ответ

8 голосов
/ 21 мая 2009

Я не выискивал текущее определение двухпроходной сортировки с множественным слиянием, но теория «внешней сортировки» (где данные слишком велики, чтобы поместиться в памяти) в значительной степени стандартна. Любая приличная книга по алгоритмам покроет это; среди многих других вы можете взглянуть на Кнута, Седжвика или (для археологов программного обеспечения) Kernighan & Plauger Software Tools .

Основная техника проста:

  1. Чтение данных до тех пор, пока не останется свободного места.
  2. Сортируй.
  3. Запись во временный файл.
  4. Повторяйте от 1 до тех пор, пока не останется данных для чтения.
  5. Вы знаете, сколько у вас временных файлов, N.
  6. Вам нужно определить, сколько из этих файлов вы можете прочитать одновременно, M.
  7. Если N> M, то вы проектируете фазу слияния так, чтобы последняя фаза объединяла M-файлы.
  8. Вы объединяете наборы M файлов в новые временные файлы, пока не достигнете последнего слияния.
  9. Вы объединяете последний набор M файлов (или N, если N

Все ужасно стандартно - но есть мелкие детали, чтобы получить право.

В томе II системы AT & T по чтению систем Unix была хорошая статья под названием «Теория и практика построения процедуры рабочей сортировки», которую вы должны найти и прочитать, если вы серьезно относитесь к изучению обработки внешних сортировок. Однако, когда вы читаете его, помните, что машины сильно изменились с момента его написания, с гигабайтами основной памяти (вместо мегабайт) и терабайтами дискового пространства (или SSD - также вместо мегабайт).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...