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

Здравствуйте!
Задался вопросом правильной архитектуры веб-сервиса. Интересует, как организовать хранение данных в приложении подобном 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 баз данных),
или ресурсоемко: в первом варианте база будет отвечать на кадый чих
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 19:42
49000 руб./за проект
25 апр. 2024, в 19:41
2000 руб./за проект
25 апр. 2024, в 19:22
18000 руб./за проект