Какой мультитенантный подход рекомендуется
В соответствии с публикацией о мультитенантной архитектуре данных существует 3 способа реализации мультитенантности
Отдельные базы данных
Общая база данных, отдельные схемы
Общая база данных, общая схема
У меня есть следующие детали:
Пользователь должен иметь возможность резервного копирования и восстановления своих данных.
Количество арендаторов: 3 (приблизительно)
Каждый арендатор может принадлежать к другому домену (URL).
Есть несколько общих таблиц для всех арендаторов.
Количество таблиц в каждом арендаторе: 10 (начальный)
Я хотел бы знать, какой подход больше подходит для меня?
4 ответа
Наиболее важным условием среди всех 5 условий является условие 4, которое говорит о том, что некоторые таблицы являются общими для всех арендаторов. Если некоторые таблицы являются общими, то отдельная база данных (т.е. вариант 1) исключается.
Вы могли бы пойти дальше с вариантом 2, общей базой данных и отдельной схемой, но число арендаторов значительно меньше (3 в вашем случае). В таком сценарии добавление издержек на поддержание отдельных схем - это издержки, которых следует избегать. Следовательно, мы можем пропустить вариант 2, пока не оценим вариант 3.
Вариант 3 - Общая база данных с общей схемой будет наиболее эффективным вариантом для вас. Это позволяет избежать затрат на поддержку отдельных схем и позволяет использовать общие таблицы среди арендаторов. В общих схемах, как правило, идентификатор клиента используется в разных таблицах. Hibernate уже поддерживает такие идентификаторы арендаторов (на всякий случай вы будете использовать Java-J2EE для реализации). Единственная проблема может быть связана с производительностью, поскольку объединение данных всех трех арендаторов в одной и той же таблице (таблицах) приведет к снижению доступа к базе данных и производительности поиска, с которой вам придется столкнуться при отмене нормализации и индексации.
Я бы порекомендовал перейти к варианту 3.
У меня была такая же проблема в моей системе. У нас была система рекламной сети, которая со временем стала довольно большой, поэтому я подумывал о переходе на мультитенантную архитектуру для каждого издателя.
Вариант 3 не был актуален, поскольку у некоторых издателей были особые требования (дополнительные столбцы / процедуры, и мы не поддерживаем разделение). Вариант 2 не был актуален, так как у нас были проблемы параллелизма и нагрузки между клиентами. Для достижения высокой производительности, с планами масштабирования до 1000 издателей, с 20 виджетами и высоким параллелизмом, Нашим единственным решением был Вариант 1 - Отдельные базы данных.
Мы уже перешли в этот режим, и у нас работает 10 баз данных с общей базой данных для конфигурации и рекламы. С производительностью это здорово. С высокой доступностью это также очень хорошо, поскольку трафик каждого издателя не влияет на все остальные. Добавление нового издателя является для нас простым шагом, поскольку у нас есть шаблонная среда. Единственная проблема, которую мы имеем, - это обслуживание.
В последнее время я читал о PartitionDB. Управлять им очень просто, поскольку у вас есть база данных для выполнения всех работ по техническому обслуживанию, включая обновления и запросы верхнего уровня. Он поддерживает общую общую базу данных (то же самое у нас уже есть), и сейчас я пытаюсь понять, как использовать автономную базу данных.
Для нас мы разработали ERP в HR, который используют около сорока клиентов и тысячи пользователей; Подход, используемый для мультитенантности, является третьим.
Кроме того, одной из используемых таблиц технического разделения была наследственность.
Я думаю, что вариант 2 является лучшим, но у вас все еще есть проблема с требованием 1. Резервное копирование и восстановление недоступны для каждой схемы. Вы должны будете справиться с этим, используя Импорт данных или любой другой инструмент. общие таблицы будут иметь отдельную схему.
В варианте 1 вам необходимо обработать требование 4, общие таблицы будут реплицированы между всеми базами данных.