@Aleksandern

SaaS. Одна база на пользователя или каждому своя?

Нужно сделать SaaS сервис. Приложение досталось готовое, но на одного пользователя (MySQL). В принципе его можно доработать на несколько пользователей, поэтому стоит выбор:
1 - использовать одно базу
2 - использовать отдельную базу для каждого пользователя

Разделять по таблицам не вижу возможным, потому что это много работы и проще приложение с нуля написать.

Основная проблема это то что база разрастется.
Для первого варианта можно использовать шардинг партицирование

Второй вариант нравится больше потому что если будут проблемы с какой-то базой остальные пользователи смогут спокойно продолжать работать.
Кто-то пишет о возможных проблемах с обновлением базы для всех пользователей (10 000 пользователей = 10 000 баз), но я не вижу проблем написать скрипт для этого, да и мониторинг в принципе можно автоматизировать.

К тому же нужно добавлять подписку и биллинг.

Для первого варианта нужно дорабатывать приложение (также сделать клиентский аккаунт и аккаунт админа).

Для второго варианта приложение придется изменить только для определения какую базу/адрес использовать .
например адрес name1.domain.com будет использовать базу name1, а name2.domain.com будет использовать базу name2 на другом сервере.
Адрес серверов баз а паролей хранить в sqlite (что-бы не зависеть от mysql).

И для второго варианта писать отдельную админ панель где клиент будет оплачивать подписку и т.п. и где администратор может управлять этими клиентами и базами. Обновлять данные sqlite базы (sqlite позволяет работать с несколькими подключениями).

Поделитесь пожалуйста своим опытом кто с подобными задачами сталкивался и как решал?
  • Вопрос задан
  • 677 просмотров
Пригласить эксперта
Ответы на вопрос 2
@alexdora
Топ-менеджер
Идите по пути наименьшего сопротивления. Сначала используйте отдельную базу для каждого пользователя. А когда будут те самые 10000, тогда и будете думать о оптимизации. Я не силен в базе, даже сказал бы слаб. Но что-то мне кажется, что когда баз станет 1000 - уже будет подтормаживать. Ведь выбрать базу из 1000/10000 - не запись из одной таблицы. <- лишь мысли в слух.
Да и не вижу какой-то проблемы во время оптимизации и переноса. 10000 баз слить скриптом в одну при оптимизации - вопрос минуты.
Ответ написан
alsopub
@alsopub
Так сходу лично мне ближе вариант "один пользователь - одна база".
Как минимум это не вызовет вопросом "почему у меня ID заказа/товара увеличивается не на 1 а произвольно".
Вариант "однако одна база на всех пользователей" может вызвать вопросы с масштабированием в будущем.
Есть компромиссный вариант - одна база на N пользователей - решает вопрос с количеством БД и масштабированием.
Ссылки по теме:
https://habrahabr.ru/post/110979/
https://habrahabr.ru/company/microsoft/blog/145027/
SaaS: одна БД на клиента, или общая база данных?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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