Страницы

Поиск по вопросам

понедельник, 13 апреля 2020 г.

Запросы к базе данных MSSQL в высоконагруженном приложении

#c_sharp #sql_server

                    
Хочу создать static class для работы с БД, содержащий методы для получения данных.
Но дело в том, что обращения к методам класса могут происходить из разных потоков.
Вопрос. Как поведет себя подобный класс при одновременном обращении к одному из методов
из двух разных потоков? (Будет ли он ждать, пока завершится первый запрос, произойдет
исключение или запрос будет выполнятся в другом потоке?)
Точнее: Как правильно организовать запросы к БД осуществляя их из разных потоков?    


Ответы

Ответ 1



Заложить в подобной задаче статический класс, как фундамент работы с БД, означает отказаться от ООП и перейти к процедурному программированию, постепенно наращивая "мусорник", в лучшем случае разделенный на "хелпер" классы, "датасорсы" или еще чего. Более того, "контекст" БД обычно НЕ потокобезопасный, как и статика, и вам придется постоянно заботиться о синхронизации. Гораздо эффективней применить какую-либо ORM для работы с БД + (UnitOfWork + Repository + Specification). В данном подходе архитектура станет к тому же и тестируемой, чего не скажешь про сплошные статические классы и методы, протестировать которые можно только при помощи дополнительного кода в виде "врапперов". Для управления жизненным циклом объектов имеет смысл использовать один из существующих решений DI/IoC. Например в вашем случае можно на этапе настройки указать жизненный цикл для контекста БД "PerThread" и "контейнер" будет сам следить, чтобы в каждом потоке был свой, новый контекст или одна транзакция.

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

Отправить комментарий