Балансировка потоков в Oracle
При параллельной загрузке данных в хранилище, чтобы уменьшить время общей загрузки таблиц часто применяется динамическая балансировка по потокам. То есть, разные задачи группируются в какое то количество потоков (обычно константа, но может также меняться в зависимости от разных условий). Выходит что на основании веса разбиваем задачи на несколько потоков, желательно чтобы максимальный суммарный вес одного потока был минимальным. Итак получается: Задача о ранце (рюкзаке) ( англ. Knapsack problem ) . Но приведу более простой алгоритм, может и не самый эффективный, но простой и удобный в реализации. Весом могут быть разные параметры, например: время загрузки в прошлый раз количество строк размер таблицы статистике Балансировку можно делать каждый раз, или в какой то период, и каждый раз задача может попадать в разные потоки. Реализация алгоритма на Oracle: WITH --элементы с весом или продолжительностью ITEMS AS ...