Я использую Symfony уже около 2 лет, до сих пор каждый проект, который я создаю, развертывается специально для каждого клиента (то есть одного клиента, одной базы кода, одной базы данных).SAAS и многоквартирный дом в Symfony2?
Допустим, у меня есть приложение для управления проектами, которое я хочу развернуть для многих клиентов. Если предположить, что клиенты будут идти с тем, что функции я встраивать в систему, если я развернуть другую кодовую (следовательно, разные БД) для каждого клиента, вот проблемы я предвижу:
Толчок исправляет ошибку и обновлений будет болезненным. Мне нужно нажать его в каждый репозиторий, который я развернул. Он не будет хорошо масштабироваться, если у меня будет 50 клиентов, использующих это приложение.
Управление является болезненным. Как я могу создать систему администратора для себя, где я могу вытащить ВСЕ проекты в одну таблицу HTML? В конце концов, у каждого клиента есть своя база данных, верно? Для меня что-то значимое со всеми записями всех моих клиентов, мне нужен способ просмотреть все свои базы данных за один раз, что ... Я не думаю, что Symfony разрешает. (Я не уверен)
Проблемы с учетной записью пользователя. Если пользователь работает для нескольких компаний, все они используют мое приложение для управления проектами, этот пользователь должен зарегистрироваться несколько раз. (Я знаю, что это можно обойти, если я использую OAuth, но я стараюсь не ходить туда, если я могу)
Вот решения я придумал и пытался в определенной степени.
Решение 1
Одна база данных и одна кодовая для ВСЕХ моих клиентов. Проекты будут проходить под одной таблицей, счета-фактуры идут под одной таблицей, все они отмечены их собственным client_id. Пользователи могут быть назначены для проектов, поэтому нет необходимости подписываться несколько раз.
Это не так сложно создать. Но что произойдет, если разные клиенты нуждаются в разных столбцах для своих счетов-фактур? Таблица My Invoice будет продолжать расширяться (с разными полями, которые нужны разным клиентам), и каждая строка может содержать много нулевых полей. Не говоря уже, моя сущность счета будет расти в размере файла, и мне придется обновить схему базы данных каждый раз, когда новая настройка приходит в.
Решение 2
одна базы данных, где каждый клиент имеет собственный префикс таблицы. Таким образом, для клиента A я мог бы использовать clientA_projects, clientA_invoices, clientA_configuration и т. Д.
Это идеальное решение, если каждый клиент хочет настроить свои поля. Но означает ли это, что мне нужно создать новые классы сущностей и форм для каждого нового клиента, входящего в систему? Похоже, что с этим решением мне нужно обновить схему базы данных каждым новым клиентом.
В настоящее время я экспериментировал с схемы меньше баз данных (Монго и диван), в надежде, что без необходимости указать схему таблицы заранее, можно реализовать решение 1 без хлопот. Но я все еще экспериментирую, и есть способы пойти, прежде чем осмелиться развернуть готовое приложение, не знакомое с проблемами монго и кушетки с Symfony.
Итак, здесь я застрял. Будучи самообразованным программистом, я чувствую, что у меня много явных знаний, требующих заполнения (в отличие от кого-то из CS-фона). В Интернете не так много мест, рассказывающих о Symfony 2 и многопользовательской аренде (возможно, я искал неправильную вещь). Если кто-то может указать мне на более ясное направление, может быть, лучшие практики, примеры проектов, я буду очень благодарен!
Btw, я планирую выполнить это в последней версии Symfony (2.3.2 на данный момент).
Спасибо заранее, ребята.
@ Lu0-dezhang есть любая возможность поделиться своими результатами? Я запускаю новое приложение SaaS с помощью Symfony3, но не имею идеи вообще относительно баз данных и организации проекта Symfony3, а также ... жестких? – ReynierPM