Структура приложения CakePHP: одна БД и приложение против нескольких БД и приложений
У меня есть короткий концептуальный вопрос:
Недавно я начал разрабатывать приложение, в котором я могу (на лету) создавать клиентов, которые, в свою очередь, могут создавать проекты, которые имеют много других вещей (собственные логины и т. Д.).
Структура URL- это "example.com/client1/project1", чтобы пользователи могли получить доступ к своему проекту. Пока все хорошо, мне удалось все это с DB-моделью и маршрутизацией и т. Д.
Пример структуры:
-> Client -> Project -> User
-> Forum -> Topic -> Post
-> Message
-> Setting
-> [...] (you get the gist)
Тем не менее, будет только несколько клиентов (< 15), поэтому мне было интересно, лучше ли использовать папку приложения SEPARATE и базу данных для КАЖДОГО клиента. Потому что таким образом я также буду иметь возможность развертывать обновления для каждого клиента отдельно.
Вот мои первые мысли по этому поводу (собираюсь для отдельных установок):
Pro: отдельные приложения
- Возможность развертывания обновлений и новых функций отдельно для каждого клиента (вполне возможно, что некоторые новые функции нежелательны для некоторых клиентов)
- Ошибка в одной БД затронет только одного клиента
Contra: отдельные приложения
- Больше работ по техническому обслуживанию с точки зрения мониторинга всех приложений и применения обновлений по всему миру (но, учитывая количество клиентов, на самом деле это не проблема)
- Может стать действительно запутанным с различными версиями и т. Д
- Нет возможности реализовать суперадмин, который может получить доступ ко всем приложениям (необходимо сделать на уровне приложения)
- Сложнее создавать общие функции и данные (например, выставлять счета клиентам)
- Плохая практика?
Если я когда-нибудь захочу объединить все установки, тогда это не будет проблемой, потому что все основано на UUID. Кроме того, я по-прежнему буду реализовывать клиентскую модель, а все остальное зависит от нее: таким образом, это будет просто вопрос объединения баз данных и файлов клиентов в одну установку приложения (учитывая, что все хотят одинаковую функциональность),
Примечание: ядро-библиотека CakePHP будет совместно использоваться в любом случае: так что это не проблема здесь.
Что бы вы подумали в этом случае? Единственная проблема, которую я вижу, это с биллингом:
Но это не проблема вызвать центральную БД из каждого клиента, чтобы сообщить ему: "Эй, я только что создал что-то, что нужно оплачивать".
Если я делаю это в одном приложении - как исключить определенных клиентов из некоторых обновлений? Или я должен просто заставить всех привыкнуть к новым функциям?
1 ответ
Из-за накладных расходов, о которых вы также упоминаете, я бы выбрал "Отдельные приложения", только если было требование, которое сделало его абсолютно необходимым.
РЕДАКТИРОВАТЬ: вам не нужно иметь различные схемы БД для настройки доступных функций для клиентов