Технически это не та проблема, которую мне нужно решать. Я разрабатываю проект, в котором приложение напрямую подключается к базе данных MS Access. Заказчик предложил перенести базу данных на свой экземпляр SQL Server. Затем приложение будет использовать другую строку подключения для прямого подключения к базе данных SQL Server вместо MS-Access. Простой тестовый запуск показал, что это сработает, если два пользователя подключены к одной базе данных.
Я не знаю, какую версию SQL Server на самом деле использует заказчик, но предполагаю, что они знают, что делают. Прямо сейчас я добавляю некоторые дополнительные изменения в код и могу протестировать приложение на SQL Server Express 2005 до 5 пользователей. Но у клиента будет более 500 пользователей, которые будут использовать одно и то же приложение одновременно, таким образом, будет 500 прямых подключений к базе данных.
Я не могу убедить заказчика доплатить за лучшую клиент-серверную модель этого проекта. Это также потребует дополнительного времени на разработку. И я не знаком с проблемами, которые могут возникнуть с таким большим количеством пользователей в одной базе данных SQL Server. Так что я чувствую себя капитаном «Титаника» и только что заметил айсберг ...
Так он утонет? Какие риски этой установки упускает из виду этот заказчик? Или нет никакого риска, о котором стоит говорить? (Заказчик имеет опыт работы с SQL Server, поэтому в основном я сомневаюсь.)
SQL Server 2005 будет работать нормально, пока пользователь использует версию, лицензированную как минимум для 500 пользователей. Возможно, вам понадобится поддержка более 500 из-за разорванных подключений и т.п., но я бы рекомендовал SQL-сервер поверх MS Access в любой день.
Я просто хотел добавить, что SQL-сервер рассчитан на тысячи одновременных подключений, поэтому на вашем месте я бы не стал беспокоиться.
Джошуа прав в том, что этот SQL Server без проблем справится с большим количеством подключений. Более важный вопрос - сможет ли ваша схема базы данных и код приложения с этим справиться.
Больше пользователей, пытающихся одновременно получить доступ и изменить одни и те же данные, скорее всего, приведут к гораздо большему количеству блокировок запросов от всех блокировок таблиц / строк в базе данных. При таком использовании производительность приложения может замедлиться до сканирования. Трудно сказать, не видя схемы вашей базы данных. Предполагая, что вы только что выполнили простое преобразование из Access в MS-SQL, скорее всего, вы не пользуетесь преимуществами настоящей СУБД, такими как ограничения, внешние ключи и индексация.
Еще одна вещь, на которую следует обратить внимание, - это проблемы, возникающие из-за одновременного использования нескольких пользователей. Разработка приложения для одного пользователя позволяет использовать ярлыки для таких вещей, как транзакции базы данных, которые должны быть атомарными. Вы сталкиваетесь с такими же проблемами при многопоточном программировании. Если у вас есть серия манипуляций с базой данных, которые должны выполняться вместе, что произойдет, когда другой пользователь запустит тот же процесс, а первый пользователь еще не завершил работу? Повлияет ли обработка второго на первый? Если да, вам нужно это учесть.
В конце концов, время покажет. Но вам может потребоваться больше работы, чем вы ожидали.
как очень опытный пользователь SQL (и Access), я согласен. у старого MSDE2000 было ограничение на количество подключений, я думаю, но новый SQL Express вообще не регулируется. Версия Express сможет обрабатывать количество подключений, но версия Express ограничена только одним процессором, что немного ограничивает возможности.
Если в конечном итоге вам потребуется больше мощности, вам придется приобрести многопроцессорную версию SQL, за которую придется платить.