2016-05-14 2 views
0

У меня 5 параллельных операций с БД необходимо выполнить независимо. Я знаю, что запрашивать количество ядер и создавать 4 или 8 (в случае 4 или 8 ядер) задачи будут дорогостоящими. .Сколько задач должно быть создано для параллелизации независимых отдельных вызовов БД?

DB Op result1 = db.Table1.Get (...) Регистрация (anotherTable2) ... Join() ..

DB Op result2 = db.Table1.Get (...). Join (anotherTable2) ... Join() ..

DB Op result3 = db.Table1.Get (...). Join (anotherTable2) ... Join() ..

DB Op result4 = db.Table1.Get (...). Join (anotherTable2) ... Join() ..

DB Op result5 = db.Table1.Get (...). Join (anotherTable2) ... Присоединиться() ..

В результате этих операций я должен решить, буду ли я продолжать дальше или нет.

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

Я не думаю о распараллеливании самого запроса.

ответ

1

Сколько задач должно быть создано для параллелизации независимых отдельных БД Звонки?

Сколько у вас независимых операций с БД.

Неправильный вопрос.

Реальный вопрос: сколько должно выполняться в одно и то же время. Это означает создание собственного лимитирующего планировщика (копирование/вставка из Интернета). Вы можете начать с https://msdn.microsoft.com/en-us/library/ee789351(v=vs.100).aspx - «Как создать планировщик заданий, который ограничивает степень параллелизма»

И это, вероятно, пробная версия и ошибка, поскольку это зависит от нагрузки и характеристик сервера базы данных, а не от компьютера вашего кода продолжается. В прошлый раз я сделал это с помощью простых операций (не очень много) и с Oracle ExaData, и мы буквально использовали сотни потоков в аппликатуре параллельно (путь больше, чем ядра, потому что они в основном ОЖИДАЮТ ДЛЯ СЕРВЕРА БАЗЫ ДАННЫХ). Сторона C# не знает, когда перегружается сервер db, поэтому мы получили их как значение конфигурации и сделали несколько пробных/ошибок, чтобы найти хорошие значения для планировщика.

+0

Правильно, что код C# не имеет понятия, когда БД вернет результат. Но я вижу различные операции с БД, которые не зависят друг от друга. Вот почему мне нужно, чтобы они выполнялись параллельно. Я бы создал родительскую задачу, которая продолжилась бы, если бы эти внутренние 5 задач БД вернули некоторые успешные значения – Usman

+0

О, сторона C# имеет много знаний о том, что тогда возвращается БД. Он просто не знает, как БЫТЬ СЕРВЕР БД. Вполне возможно, что две параллельные операции уже перегружают сервер db, а третий - намного медленнее. Но вы не можете видеть это из приложения C#. – TomTom

+0

Итак, что делать? Не должны ли распараллеливаться на TPL разные вызовы db на SQL-сервер (при максимальном количестве 4 таблиц для каждой задачи)? Я хочу выполнить параллельное выполнение, но не знаю, как создавать задачи для одновременного выполнения 5 операций. – Usman

Смежные вопросы