Поиск лучшего подхода к SaaS с несколькими базами данных, общим ресурсом и EF - PullRequest
1 голос
/ 26 февраля 2012

Сначала, пожалуйста, извините меня за мои грамматические ошибки.

Хорошо, это то, что я уже знаю :-), я хочу использовать EF и MVC 4, пользовательский интерфейс с angularJ, мне нужна база данных на пользователя \группа пользователей, мой рост приложения может достигать 5000+ пользователей, все они также имеют общий ресурс, который является единой базой данных, когда пользователь ищет что-то, результаты будут поступать как из общего ресурса, так и из собственной базы данных пользователя.Производительность чрезвычайно важна.

В своем исследовании я обнаружил, что EF может подключаться к различным базам данных, но я не мог найти какой-либо правильный способ сделать это без написания тонны кода.Сценарии:

  1. Новые регистры пользователей, система создает для него новую базу данных.
  2. Новый пользователь входит в систему, система возвращает данные из его базы данных и общей базы данных.
  3. Новый пользователь входит в систему, НО, системная база данных обновлена, пользователи db должны тоже.

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

Опять извините за мой английский!Спасибо!: -)

1 Ответ

2 голосов
/ 11 августа 2013

ИМХО, мы работали в нескольких приложениях SaaS, которые использовали общую базу данных [центральный репозиторий], которая будет содержать все данные пользователя [арендатора] и что для каждой группы пользователей будет база данных приложения [основанная на арендаторе].

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

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

Что касается синхронизации пользовательских БД и централизованной базы данных, на уровне обслуживания вы можете выполнить эту работу, поместив эти вызовы в область .Net Transaction, а затем сохранив атомарность.

Пожалуйста, напишите ваше понимание и любые дальнейшие разъяснения в моем ответе.

...