2012-06-21 4 views
4

Я часть команды, которая в настоящее время разрабатывает специальный сервис SaaS для определенной группы организаций. У меня есть знания в PHP и mySQL, поэтому я разрабатываю их на этих платформах. Будет развернуто это на облаке и выпущено в нескольких странах.Многопользовательская настройка SaaS mySQL?

Ive подходит к разделению организаций/основных пользователей в базе данных и хотел бы посмотреть, что вы, ребята, думаете.

Когда SaaS управляет счетами-фактурами и многими другими конфиденциальными сведениями, что было бы лучшим способом его распространения на сервере mySQL? Ive подумал о следующих вариантах:

1) имея всю информацию в одной базе данных в отдельных таблицах и разделяемую организацией, определяющей строку. - кажется безопасным и может быть медленным, когда есть несколько тысяч пользователей и 10 000 строк?

2) с одной базой данных, но разделяющей таблицы с идентификатором пользователя, например. «1000_invoices» - снова может быть быстрее, но не так безопасно.

3) есть отдельные базы данных, созданные для каждой регистрации организации, и конкретный пользователь, используемый для доступа к базе данных, и имя базы данных хранится в сеансах/cookie? для пользователей организаций.

В любом случае мне было интересно, что вы, ребята, думаете, будет лучшим вариантом? и если не выше, то что вы рекомендуете? и почему? также что-нибудь о безопасности будет принята с благодарностью. Раньше не работали с крупными многоорганизационными приложениями. благодарим заранее!

ответ

8

В прошлом я разработал множество приложений SaaS, и мы обнаружили, что настройка «единого развертывания приложений, одна база данных», используемая большими «общедоступными» службами SaaS (например, KashFlow, возможно, Salesforce?), Не создавала много смысла. Вот почему:

  • Номер 1: Клиент компании с конфиденциальной информацией будут хотеть гарантии их данные более «безопасный», и это легче сделать эти обещания, когда их данные разделены за уровнем приложений.
  • Различные клиенты иногда хотят, чтобы их прикладное программное обеспечение было им настроено, например, их собственные дополнительные поля базы данных, другой визуальный дизайн экрана входа в систему или различные (или пользовательские) системные «модули» - с разными экземплярами приложений. Это может быть
  • Это также облегчает масштабирование, по крайней мере, при начале. Легче балансировать нагрузку, предоставляя приложение отдельного клиента на свой собственный сервер отдельно от других, тогда как с одним приложением это означает, что вам нужно потратить больше времени на разработку, чтобы сделать его масштабируемым.
  • С базовыми ключами базы данных проще работать. Ваши клиенты могут начать задавать вопросы, например, почему их значения «CustomerID» увеличиваются на 500 каждый раз, а не на 1.
  • Если у вас есть клиенты, расположенные по всему миру, проще обеспечить развертывание в другой стране (с ее собственный локальный сервер и сервер БД), а не развертывание гигантского приложения за рубежом или принуждение пользователей использовать межконтинентальные (т.е. медленные + лагги) подключения к вашим серверам, расположенным за тысячи километров.

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

+0

спасибо за ваш ответ Дэвид, я думаю, что поеду с отдельной базой данных/организацией. Как вы рекомендуете отправлять данные базы данных (база данных, логин и т. Д.)? Когда login установлен как переменная сеанса? – Anthony1234

+0

С PHP я сохраняю все временное состояние сеанса. Сведения о базе данных (например, строка подключения) являются свойством сайта, а не пользователем (так как это один сайт на базу данных для каждого клиента), поэтому просто вставьте его в статический файл Configuration.php на сайте. – Dai

+0

Извините, я думал, что вы имеете в виду один сайт в целом и одну базу данных для организации. так как каждый пользователь регистрируется в нем, он устанавливает свою конкретную базу данных в сеансе, а затем сайт является их информацией, непосредственно из их конкретной базы данных. Не иметь отдельных файлов для каждой организации? Что будет лучше, если вы думаете? Разве это не будет проще? Может быть автоматизирован. – Anthony1234

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