Мы разрабатываем новую версию нашего веб-приложения. У нас есть несколько клиентов (500+), каждый клиент имеет собственную базу данных со своими собственными данными: пользователями, продуктами ...Несколько с одной базой данных
В новой версии все клиенты собираются поделиться некоторыми данными, например, пользователи которые будут находиться на платформе, но каждый клиент сможет получать доступ только к своим пользователям, но вместо того, чтобы иметь пользователей для каждого клиента, мы хотим, чтобы все пользователи в таблице централизации.
Другие предметы, такие как продукты, заказы ... будут принадлежать каждому клиенту.
Каждый клиент будет иметь копию веб-приложения, установленного в их домене. Наше приложение представляет собой ASP MVC Entity Framework Code Сначала, используя SQL Server.
Наш вопрос:
Вариант А: Одна база данных на каждого клиента, содержащих свои таблицы (продукты, заказы ...) и одну общую базу данных для хранения пользователей и другие общие данные.
Вариант B: Одна большая база данных, содержащая все и добавляющая ClientId в определенные таблицы, чтобы клиенты могли видеть только их данные.
ЗА И ПРОТИВ:
с опцией А у нас есть несколько баз данных, мы можем иметь 100.000 заказов в таблице и легко получить эти данные. С другой стороны, нам приходится иметь дело с кросс-базами запросов и иметь 2 Контекста данных. Это пролет, поэтому нам нужно получить пользовательские данные для большинства запросов, что означает доступ к обоим базам данных, к конкретным клиентам и к общему.
С вариантом B нам просто нужно иметь дело с 1 контекстом, и запросы намного проще. Основная проблема такого подхода заключается в том, что мы могли бы иметь несколько таблиц с более чем 10 000 записей в год на одного клиента. Таким образом, через 10 лет, с 500 клиентами, у нас может быть таблица с 50 миллионами записей, и это может повлиять на производительность.
Спасибо за ваши советы.
EDIT
Дело здесь не вопрос Abou одного против несколькими базами данных, потому что у нас есть еще одна вещь в игре, все клиенты должны получить доступ к общей базе данных.
EDIT 2
Допустим, мы решили пойти на единую базу данных для всех наших клиентов. Таким образом, у нас будет несколько доменов, каждый из которых будет работать с нашим приложением, но нам нужно, чтобы каждый из них получал только свои данные.
Как мы можем это сделать? Добавление ClientId в каждую таблицу и фильтрацию данных с параметром «clientId» в web.config каждого сайта?
Используете ли вы на помещения SQL Server на каждом клиентском месте в настоящее время? С одной центральной базой данных вам придется учитывать сетевую задержку. Вдоль этой линии все они географически закрыты? Безопасность будет для вас большой проблемой. –
Чтобы смягчить ваши опасения по поводу варианта B, вы можете разбить таблицы –
, в это время все базы данных находятся на одном сервере ... единственное, что заставляет нас думать, - теперь нам нужны общие пользователи для всех клиентов, так как мы разработка глобальной платформы –