Это мое мнение, и я хотел бы обсудить его.
Существует несколько известных способов хранения данных, основанных на арендаторах. Я думаю, что это зависит от вашего решения, бюджета, размера команды и места, где вы хотите поставить сложность.
- Экземпляр системы базы данных на каждого арендатора : Обычно мы используем этот метод для
on-premise
решений. Арендаторы используют и управляют своим собственным экземпляром базы данных на своем собственном сервере / в облаке. - База данных на каждого арендатора : это самый безопасный способ изолировать данные арендаторов друг от друга для облачного решения. Но требует дополнительных усилий для обслуживания и управления (резервное копирование, изменения в разработке, переиндексация и т. Д. c). Кроме того, приложение должно иметь возможность обрабатывать / объединять соединения для каждой базы данных.
- Схема для каждого арендатора (в мире MongoDb это будет невозможно, поскольку у него нет схемы)
- Таблица / коллекция на одного арендатора :
- Строка / документ на одного арендатора : обеспечивает слабую изоляцию. И должны быть хорошо оптимизированы для каждого вида запросов. Тем не менее, самый простой способ обслуживания.
Рассматривая решение, которое поддерживается очень маленькой командой (2 или 3 человека): Я бы использовал document-based isolation (with a field tenantId)
и имел бы несколько sharded clusters
для масштабирования данных арендатора с использованием инициалов имен арендаторов в качестве ключа шардинга.
- кластер # 01: арендаторы с именами начинаются с AH
- кластер # 02: арендаторы с названия начинаются с HS
- ...
Учитывая облачное решение, которое используется тысячами клиентов по всему миру и поддерживается большой командой : Вероятно, я получит go с sharded clusters
(в разных странах) и распределит арендаторов в соответствующий сегментированный кластер по местоположению арендатора и получит database per tenant
.
Рассматривая корпоративное решение: Я предпочитаю предлагать on-premise
клиентам.
В дополнение ко всему выше : я могу рассмотреть использование slave replica sets
для выполнения операций чтения вместо использования основного экземпляра.