Чтобы не быть голословным, провел несколько тестов.
Тестировалась две БД, на нескольких серверах.
В колонке "сортировка" в скобках указано время за которое выполнялась сортировка
процессами IrbisMultiLoad.exe (засекал секундомером с телефона)
В колонке "Итого" в скобках время отбора+время сортировки в скобках+время
загрузки + 15 сек (примерно сколько надо чтобы слить все файлы в один)
Был также написан скрипт, на python'е, который определяет кол-во процесоров в
системе, кол-во записей в БД, затем запускает нужное кол-во процесов
IrbisMultiLoad с указанием какую часть обрабатывать, после их завершения делает
слияние всех файлов в один и запускает пакетное задание на загрузку словаря.
Результат работы в строке с "MULTYSORT=2"
%1 - % времени относительно однопоточной работы
%2 - % времени относительно "реконендованой" настройки многопоточной работы
БД 88805 записей
Сервер 1: 6 ядер, 8Гб ОЗУ, не виртуальный [win2003 R2 sp2](загруженный работой)
Вариант Отбор Сортировка Загрузка Итого %1 %2
MULTYLOAD=6, MULTYSORT=0 09:18 01:59 00:18 11:35 24.5% 100%
MULTYLOAD=6, MULTYSORT=1 09:23 03:02(00:26) 00:18 12:43(10:22) 26.9%(21.9%) 109.8%
MULTYLOAD=0, MULTYSORT=0 45:01 01:55 00:20 47:16 100% 408%
MULTYLOAD=6, MULTYSORT=2 09:39 00:15 00:19 10:13 21.6% 88.2%
Сервер 2: 16 ядер, 8Гб ОЗУ, виртуальный [win 2008 R2 sp1](работает только ирбис,не считая соседних ВМ)
MULTYLOAD=16, MULTYSORT=0 10:45 04:59 01:08 16:52 18.1% 100%
MULTYLOAD=16, MULTYSORT=1 10:48 21:54(00:33) 01:08 33:50(12:29) 36.2%(13.4%) 200.6%
MULTYLOAD=0, MULTYSORT=0 87:24 04:52 01:07 93:23 100% 553.7%
MULTYLOAD=16, MULTYSORT=2 11:04 00:42 01:14 13:00 13.9% 77.1%
БД 174351 запись
Сервер 1: 6 ядер, 8Гб ОЗУ, не виртуальный [win2003 R2 sp2](загруженный работой)
MULTYLOAD=6, MULTYSORT=0 27:50 100%
MULTYLOAD=6, MULTYSORT=1 30:51 110.8%
MULTYLOAD=6, MULTYSORT=2 19:31 70.1%
Сервер 2: 16 ядер, 8Гб ОЗУ, виртуальный [win 2008 R2 sp1](работает только ирбис,не считая соседних ВМ)
MULTYLOAD=6, MULTYSORT=0 41:25 100%
MULTYLOAD=6, MULTYSORT=1 не тестировал,будет явно хуже
MULTYLOAD=6, MULTYSORT=2 28:51 69.7%
Как можно увидеть, многопоточная работа дает существенный прирост производительности, вот только сортировка подкачала...
Выиграш при использовании оптимального алгоритма сортировки составляет от 11.8% до 29.9% в зависимости от объема базы.
На одинаковом объеме, но разном кол-ве процесов получаем от 11.8% до 22.9%.
Реализация такого алгоритма - очень простая, вполне можно сделать за один день. И выиграш не такой и маленький :)
Самый ресурсоемкий просесс - это отбор записей. И тут тоже есть что оптимизировать. Правда результат предсказать
сложно, да и насколько это будет затратно, в плане разработки тоже. Одно точно могу сказать - хуже не будет и как минимум несколько % можно вииграть