Как получить выбор из SQL Server для многопоточности? - PullRequest
1 голос
/ 08 сентября 2011

У меня есть программа на C #, которая выбирает все строки таблицы с примерно 100 миллионами строк и выполняет некоторый анализ каждой строки.Анализ каждого ряда не зависит от анализа в каждом другом ряду.Я хотел бы сделать мое приложение многопоточным, чтобы ускорить вычисления (я работаю на двухъядерном четырехъядерном процессоре Intel Xeon).Для двух потоков мне бы хотелось, чтобы один поток выбирал первую половину (около 50 миллионов) строк, а другой поток выбирал вторую половину строк.Какой самый эффективный способ сделать это?Все мои строки имеют первичные идентификаторы.Моя программа прямо сейчас запускает select * from table.

Ответы [ 4 ]

2 голосов
/ 08 сентября 2011

Вы используете LINQ и .NET 4.0?Если это так, вы можете использовать Parallel Linq , чтобы делать то, что вы хотите легко.

1 голос
/ 08 сентября 2011

Попробуйте запустить анализ в самом запросе.Это может быть намного быстрее, чем возвращать строки и выполнять анализ локально.

1 голос
/ 08 сентября 2011

Я думаю, вам нужно определить, где находится узкое место. Ваш оператор выбора занимает 10 секунд для выполнения, но ваш анализ кода занимает миллисекунды? Или это наоборот?

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

1 голос
/ 08 сентября 2011

Почему бы просто не использовать это?

select * from table where id % 2 = 0
select * from table where id % 2 = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...