организация мультитенантных БД / MySQL [SaaS]

0

Хорошим примером будет shopify. Где у вас N количество пользователей (в этом случае каждый пользователь предполагает сайт). И у каждого пользователя будут свои записи в БД. Но схема БД будет одинаковой (одинаковые таблицы для каждого пользователя, products, customers, orders и т.д.).

Итак, вопрос в том, что будет лучшим способом организовать такое решение? Храните все в одной БД, но в разных таблицах, или запускайте отдельную БД для каждого пользователя (но тогда возникнет вопрос с поддержкой, масштабируемостью и автоматизацией)

возможное решение:

Мы можем использовать одну БД с общими таблицами, такими как products, customers, orders и т.д. И у нас будут users таблиц, где мы будем хранить записи о каждом сайте. В таблицах products, customers мы сгруппируем все записи по user_id. Это одно из возможных решений. Но если у нас будет 1000 пользователей (сайтов), у каждого будет ~ 2 тыс. Продуктов и ~ 100 тыс. Клиентов, мы можем получить таблицы с миллионами записей, поэтому возникнут следующие вопросы:

  • Как он будет выполнять сравнение, чтобы каждый пользователь (сайт) имел свою собственную БД?
  • Насколько надежен этот подход? большие данные, сложнее поддерживать, резервное копирование/восстановление
  • безопасность, если что-то не так с одним источником тысяч будет затронуто

Любые ссылки и т.д. Будет высоко ценится, спасибо!

Теги:
database
architecture
database-design

2 ответа

1
Лучший ответ

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

http://www.zentut.com/sql-tutorial/sql-sample-database/

  • 0
    Спасибо за ответ! Я расширил свой вопрос, чтобы он был более понятным.
  • 0
    Я думаю здесь ответ. msdn.microsoft.com/en-us/library/aa479086.aspx
1
  1. Создайте пользователя mysql для каждого арендатора
  2. Добавьте столбец tenant_id в каждую таблицу
  3. Добавьте представление для каждой таблицы, которая фильтрует на основе tenant_id = mysql_user
  4. Используйте триггер для автоматического заполнения столбца tenant_id на INSERT
  5. Ограничьте пользователей mysql клиента доступом только к представлениям, а не к необработанным таблицам

Я написал сообщение в блоге о том, как с помощью этой методики я смог преобразовать большое однопользовательское приложение mysql в многопользовательское приложение в выходные дни. https://opensource.io/it/mysql-multi-tenant/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню