Перемешивать таблицы в порядке их размера, чтобы минимизировать потребление памяти и время выполнения - PullRequest
0 голосов
/ 17 января 2020

Мне нужно создать оптимальный список таблиц базы данных, чтобы их последующая параллельная обработка сводила к минимуму потребление памяти и общее время выполнения.

Обратите внимание, что потребление памяти и время выполнения коррелируют с размером таблицы.

Когда я сортирую их по убыванию по размеру, вначале у меня возникают проблемы с памятью, поскольку все рабочие потоки пытаются загрузить в память самые большие таблицы. Когда обработка больших таблиц начинается слишком поздно, у меня заканчивается длительное время выполнения, поскольку другие работники уже закончили с небольшими таблицами.

Что я делаю сегодня, так это то, что я сначала сортирую их по размеру, а затем перемешиваю их следующим образом:

  • начиная с 1 добавить каждую 25-ю таблицу
  • , затем начиная с 2 добавить каждую 25-ю таблицу
  • ...
  • наконец, начиная с 25 берут каждый 25-й стол

Таким образом, я начинаю с самых больших и N / 25 постепенно меньших столов, затем со второй самой большой таблицы и N / 25 других постепенно меньших столов. Конечно, я рассматриваю случай, когда общее количество таблиц не кратно 25.

Этот алгоритм работает в большинстве случаев, но не всегда. Иногда есть много маленьких столов и несколько больших - или наоборот. Особенно размер пакета 25 выбирается искусственно, и я считаю, что есть какой-то лучший способ.

Когда я визуализирую распределение размеров отсортированных таблиц в диаграмме, то обычно это выглядит как кривая безразличия с таблицами на x и размер по оси у. Перемешивание выше преобразовывает это в уменьшающуюся кривую пилообразного Но, тем не менее, это выглядит как кривая, если мы соединяем ее максимальные пики.

То, что я ищу, - это сгладить эту кривую на этих пиках как можно больше, потому что я считаю, что это может быть оптимальным результатом для минимизации потребление памяти и общее время выполнения. Однако мне не хватает алгоритма и математического обоснования для него.

Любые предложения, как решить эту проблему?

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