Как хранить данные в базе веб сервиса?

Здравствуйте!
Задался вопросом правильной архитектуры веб-сервиса. Интересует, как организовать хранение данных в приложении подобном CRM-системе с перспективой на масштабируемость.
Т.е. там есть много пользователей, у каждого свой набор клиентов и т.д.
Из того, что я нашел:
  • Одна таблица с клиентами всех пользователей, в этой таблице Ключ со значением Пользователя
  • Отдельная таблица с клиентами для каждого пользователя, имя User1_clients
  • Отдельная база данных для каждого пользователя
  • На Хабре читал про вариант с виртуализацией, когда для каждого пользователя создается виртуальная машина со своей версией веб-приложения и БД


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

К сожалению, англоязычных ответов на подобный вопрос не нашел. Если есть ссылки, буду рад.
  • Вопрос задан
  • 2336 просмотров
Решения вопроса 2
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Одна таблица с клиентами всех пользователей

единственный нормальный вариант.

Отдельная таблица с клиентами для каждого пользователя, имя User1_clients

Отдельная база данных для каждого пользователя

200-500-1000 клиентов? как это вообще обслуживать?

На Хабре читал про вариант с виртуализацией, когда для каждого пользователя создается виртуальная машина со своей версией веб-приложения и БД

Аналогично. Бесконечные серверные ресурсы? Как обслуживать?
Ответ написан
Epsiloncool
@Epsiloncool
Программер, веб-девелопер, гейм-девелопер
Таблица users, в ней все пользователи. Таблица clients, в ней все клиенты всех пользователей.

Далее два варианта. Первый - если каждый клиент может быть прикручен только к одному пользователю, то в таблице clients будет столбец user_id, хранящий id того юзера, к которому он принадлежит.

Второй вариант - когда каждый клиент может быть прикручен к нескольким пользователям. Тогда нужно завести ещё одну таблицу users_clients, в которой будет два поля user_id и client_id. Каждая запись в этой таблице прикручивает одного любого клиента к одному любому юзеру (вариант М:М).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
Отдельная таблица с клиентами для каждого пользователя

все остальное или необслуживаемо (не представляю как реплицировать 5000 баз данных),
или ресурсоемко: в первом варианте база будет отвечать на кадый чих
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы