2016-12-06 3 views
1

Мы разрабатываем новую версию нашего веб-приложения. У нас есть несколько клиентов (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 каждого сайта?

+0

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

+0

Чтобы смягчить ваши опасения по поводу варианта B, вы можете разбить таблицы –

+0

, в это время все базы данных находятся на одном сервере ... единственное, что заставляет нас думать, - теперь нам нужны общие пользователи для всех клиентов, так как мы разработка глобальной платформы –

ответ

0

Мое личное предпочтение было бы для варианта A, и основная причина была бы для безопасности. У вас в основном есть только пара пунктов отказа, чтобы утечка данных одного клиента другому.

Вы можете посмотреть, как поставить службу поверх общих данных и кэшировать частые запросы для пользовательских данных для обработки этой стороны.

+0

Наше главное - нам нужна общая база данных для хранения всех пользователей и других распространенных вещей, и большинство запросов будут запрашивать эту базу данных, так как нам нужна информация о пользователях. Также все клиенты могут обновлять эти пользователи, поэтому каждый получает обновление. Наша основная проблема заключается в управлении этим в EF Code Firs Context, так как нам нужны два контекста, а запросы сложны, теряя некоторые преимущества EF –

0

Вариант A был бы рекомендованным подходом, поскольку это позволит всем различным клиентам запрашивать свои собственные транзакционные записи и без каких-либо проблем с производительностью из-за запросов от других клиентов.

Кроме того, опция A позволит настраивать объекты на основе сущности (если это необходимо в будущем), что окажется проблемой с опцией B. Рекомендация - это многопользовательская архитектура.

Ниже предоставленный ресурс может помочь вам с некоторыми дополнительными возможностями/возможностями.

https://msdn.microsoft.com/en-us/library/aa479086.aspx

+0

, думаете ли вы, что у нас может быть больше проблем с производительностью с одной базой данных, чем с несколькими базами данных в одном и том же сервер? –

+0

В будущем мы не будем делать заказ на клиенте, это программный пакет. Наша основная проблема заключается в том, что все клиенты имеют общие данные, такие как пользователи, даже если пользователь создан на клиенте, который он будет хранить в общей базе данных. –

+0

. Вы можете размещать несколько баз данных на одном физическом сервере, а SQL-сервер можно настроить в более подробные настройки для оптимальной производительности.Одна основная база данных может хранить пользователей, которые будут совместно использоваться во всех разных базах данных в соответствии с функциональными требованиями программного обеспечения, и по-прежнему получать оптимальную оптимизацию с использованием общих и отдельных клиентских баз данных. –

 Смежные вопросы

  • Нет связанных вопросов^_^