Мультитенантный PHP SaaS - Отдельные БД для каждого клиента или их группировка?

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

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

Похоже, у меня есть варианты, которые касаются хранения данных:

Опция 1 - Храните все в 1 большой базе данных иID клиента' поле для таблиц, которые в нем нуждаются (будет около 30 таблиц, к которым оно будет применяться), и имеютклиентов в таблице хранятся их основные настройки, детали и т. д. и домен для сопоставления с ними. Затем он просто устанавливает глобально доступную переменную, содержащую их индивидуальный идентификатор клиента - I 'Очевидно, мне нужно изменить каждый запрос, чтобы проверить столбец client_id.

Вариант 2 - Иметь главный стол собщая ссылка столы иклиентов Таблица. Тогда естьблоки из других баз данных, каждая из которых содержит, скажем, 10 клиентов. Клиент получит свои собственные таблицы базы данных с префиксом своего идентификатора клиента. Это добавляет немного безопасности для защиты от просмотра других данных клиента, если что-то пошло не так.

Вариант 3 - Точно так же, как вариант 2, за исключением того, что у вас есть 1 база данных для каждого клиента, что полностью изолирует их от других клиентов и теоретически обеспечивает немного большую защиту, чем если бы 1 клиентстолы были взломаны или иным образом повреждены, это нени на кого не влияет. Самым большим недостатком является то, что при развертывании нового клиента необходимо настроить всю базу данных, пользователя и пароль и т. Д. Может ли это также привести к значительным затратам или это будет примерно так же, как если бы у вас было все в одном база данных?

Несколько баллов - у некоторых из этих клиентов будет более 5000клиентов наряду со всеми деталями для этих клиентов - вот почему вариант 1 может быть немного проблемой - если яу нас 100 клиентов, что может составить более полумиллиона строк в 1 таблице.

Правильно ли я считаю, что вариант 3 будет наилучшим путем в ситуации, когда безопасность данных клиента (и информации о платеже) является ключевой. Из рекомендаций я вышлаУ нас было несколько человек, которые сказали, что нужно выбрать вариант 1, потому чтоэто легче' Однако я действительно неЯ так не вижу. Я рассматриваю это как потенциальное узкое место в будущем, так как, конечно, я могу гораздо легче перемещать клиентов, если у них есть собственная база данных.

(К сведению, система основана на PHP с MySQL)

Ответы на вопрос(3)

Ваш ответ на вопрос