2012-03-18 3 views
2

У меня есть набор записей, основанный на времени, который мне нужно загрузить в секционированную таблицу, которая используется для обработки данных. Стол сцены разделен на день. Я распределил загрузку данных в таблицу сцен на нескольких «процессорах» (потоки в SSIS) для повышения эффективности. После того, как данные поставлены, я затем выполняю серию операций дедупликации перед загрузкой в ​​файл данных. Однако моя задача состоит в том, что поэтапные данные не разделяются поровну между процессорами, так как я использую функцию NTILE по множеству, разделенному по дате.Как чередовать данные, равномерно распределенные по границам

Так что я мог бы увидеть следующее распределение 5 процессоров ...

Processor 1, >= 2011-01-01 and < 2011-05-01, Rows = 200,000 
Processor 2, >= 2011-05-01 and < 2011-09-01, Rows = 3,000,000 
Processor 3, >= 2011-09-01 and < 2012-01-01, Rows = 6,000,000 
Processor 4, >= 2012-01-01 and < 2012-05-01, Rows = 6,000,000 
Processor 5, >= 2012-05-01 and < 2012-09-01, Rows = 0 

объем данных растет в геометрической прогрессии, так что, хотя процессор 4 имеет только 6000000 в момент нагрузки сегодня, когда полный диапазон обрабатывается, процессор 4 может работать в общей сложности на 8 000 000 строк (записей).

Моя цель - распределить работу равномерно по процессорам на основе количества строк, гарантируя, что любые два процессора не будут бороться за один и тот же раздел (день).

Так что, как визуальное распределение нужно будет искать что-то вроде этого ...

Processor 1, >= 2011-01-01 and < 2011-09-01, Rows (3,200,000) 
Processor 2, >= 2011-09-01 and < 2011-11-01, Rows (3,000,000) 
Processor 3, >= 2011-11-01 and < 2012-01-01, Rows (3,000,000) 
Processor 4, >= 2012-01-01 and < 2012-01-03, Rows (3,000,000) 
Processor 5, >= 2012-01-03 and < 2012-03-18, Rows (3,000,000; 2012-03-18 contains most current data) 

Любая обратная связь будет высоко оценен.

ответ

0

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

Если да, то вы можете сделать «круглую робин» разбивку по дням. Вместо использования диапазонов, преобразовать дату в число и назначить раздел, основанный на модах 5. Вот пример:

select CAST(<thedate> as int)%5 

Это должно работать гораздо лучше для балансировки нагрузки.