Как я могу обработать веб-приложение, которое подключается ко многим базам данных SQL Server? - PullRequest
4 голосов
/ 06 октября 2010

Я создаю веб-приложение ASP.NET, которое будет использовать SQL Server для хранения данных. Я наследую существующую структуру и не могу ее сильно изменить. Люди, которые используют это приложение, являются отдельными компаниями, которые заплатили за использование приложения. Каждая компания имеет около 5 или 10 человек, которые будут использовать приложение. Есть около 1000 компаний. То, как система в настоящее время структурирована, каждая компания имеет свою собственную уникальную базу данных в экземпляре SQL Server. Структура каждой базы данных одинакова. Я не думаю, что это хороший дизайн базы данных, но я ничего не могу с этим поделать. Существуют и другие приложения, попавшие в эту базу данных, и было бы весьма непросто переписать интерфейсы БД для всех этих приложений.

Итак, мой вопрос - как спроектировать архитектуру для нового веб-приложения. Есть времена месяца, когда сайт будет получать много трафика. У меня такое ощущение, что сайт не будет работать хорошо в это время, потому что я предполагаю, что когда 500 человек из разных компаний одновременно получают доступ к сайту, у каждого из них будет свое уникальное соединение с базой данных, потому что они обращаются к разным базам данных SQL Server с разными Строки подключения. SQL Server не будет использовать пулы соединений. У меня сложилось впечатление, что это плохо.

Что произойдет, если они удвоят количество своих клиентов? Сколько уникальных соединений с базой данных может обрабатывать SQL Server? Это ситуация, когда я должен сказать клиенту, что он должен изменить дизайн, если он хочет оставаться масштабируемым?

Спасибо, Corey

Ответы [ 3 ]

2 голосов
/ 06 октября 2010

Вам не нужно создавать отдельные подключения для каждой БД

У меня есть приложение, которое использует несколько БД на одном сервере.Я добавляю к каждому запросу префикс «USE dbName;»

Я даже запускал запросы к двум отдельным БД в одном и том же вызове.

Что касается вызова хранимых процедур, это немного другой процесс.Так как вы не можете сделать

     Use myDB; spBlahBLah

Вместо этого вы должны просто изменить БД в объекте соединения.В .Net это выглядит примерно так:

     myConnection.ChangeDatabase("otherDBName");

, затем вызовите вашу хранимую процедуру.

0 голосов
/ 06 октября 2010

Масштабирование - сложная проблема. Однако почему вы не масштабируете веб-аспект? Тогда пул соединений ограничивается веб-приложением.

редактирование: Я говорю об общем случае здесь. Я знаю, что объединение происходит на многих уровнях, а не только в IDbConnection (/2779598/yavlyaytsya-li-ado-net-2-0-puly-podklycheniya-do-domena-prilozheniya-ili-na-protsess). Мне было интересно, рассматривал ли вопросящий вопрос масштабирование на уровне приложения we.

0 голосов
/ 06 октября 2010

Надеюсь, у вас есть единая база данных для общих предметов. Здесь, я надеюсь, у вас есть таблица Clients с IsEnabled, Logo, PersonToCallWhenTheyDontPayBills и т. Д. Добавьте столбец для Database (т. Е. Каталог), и пока вы там, Server. Ваше веб-приложение при запуске будет указывать на common базу данных и формировать список подключений к базе данных для каждого клиента. Программно создайте строки подключения к базе данных со столбцами Server и Database в таблице.


UPDATE

После моего обсуждения с @Neil я хочу отметить, что мой метод предполагает одноэлементное соединение с базой данных. Если ты не сделаешь этого, глупо последовать моему совету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...