Реализация многопоточности в вызовах БД с использованием TPL

#task-parallel-library

#task-parallel-library

Вопрос:

В веб-приложении, над которым я сейчас работаю, я должен выполнить несколько вызовов к базе данных и, наконец, объединить результаты для отображения в пользовательском интерфейсе. Прямо сейчас.. Я выполняю вызовы один за другим и, наконец, объединяю результаты. Поскольку веб-приложение будет размещено на многоядерном компьютере (intel i5) Я думаю, что могу использовать TPL для выполнения параллельных вызовов БД. Это хорошая идея? Какие вещи / подводные камни я хочу учитывать при выполнении параллельных вызовов в БД?

Комментарии:

1. «мы приложение» вы имеете в виду «веб-приложение», верно?

Ответ №1:

Здесь следует помнить две вещи. Во-первых, API, предоставляемый БД, может быть не потокобезопасным, например ADO.NET явно не является на 100% потокобезопасным. Во-вторых, делая это, вы перемещаете свою нагрузку из clinet в БД. Другими словами, если ваш клиент создает 5 одновременных подключений к БД одновременно, это окажет большее влияние на загрузку БД. Задержка отдельного клиента для пользователя может быть уменьшена, но за счет общей пропускной способности с точки зрения количества клиентов, которые может поддерживать отдельная БД.

Если в значительной степени зависит от вашего сценария относительно того, считаете ли вы, что это хороший компромисс.

Вы говорите «мы, приложение», если вы имеете в виду веб-приложение, тогда это аналогичные компромиссы, я бы рекомендовал это сообщение в блоге об использовании TPL из веб-приложения.

http://blogs.msdn.com/b/pfxteam/archive/2010/02/08/9960003.aspx

Это та же проблема. Вы обмениваете задержку отдельного запроса на пропускную способность или наоборот.