J'apprends multi-tenant applications et comment les schémas de PostgreSQL peuvent être utilisés pour cela.
En recherchant le sujet, j'ai fini par trouver n article dans lequel l'auteur décrit une mauvaise expérience lors de l'utilisation des schémas de PostgreSQL dans des applications multi-locataires. Les principaux problèmes seraient d'avoir de mauvaises performances pour les migrations et une utilisation élevée des ressources de base de données.
Il semble qu'avoir un seul schéma (partager les tables entre les locataires) conduirait à de meilleures performances que d'avoir un schéma séparé pour chaque locataire. Mais cela me semble étrange. Je pense le contraire, car les index sur les petites tables ont tendance à être plus légers que les index sur les grandes tables.
Pourquoi les performances seraient-elles pires lorsque les données sont séparées dans un grand nombre de petites tables (dans plusieurs schémas), plutôt que d'avoir des données séparées dans quelques tables énormes (dans un seul schéma)?
Les performances ne sont pas nécessairement pires. Comme l'article l'explique, il existe des conditions spécifiques qui rendent l'approche du schéma meilleure ou pire en fonction de la conception de votre application et de la charge de travail. Permettez-moi d'expliquer les compromis entre les approches "schéma de locataire" et "table partagée":
schéma-locataire est préférable lorsque vous avez un nombre relativement faible de locataires assez importants. Un exemple de ceci serait une application de comptabilité, avec seulement des utilisateurs d'abonnement payants. Les éléments qui en font l'option la plus performante pour vous incluent:
Les éléments qui en font une option peu performante comprennent:
Que le schéma du locataire soit mauvais pour les migrations/modifications de schéma dépend vraiment de la façon dont vous les effectuez. C'est mauvais pour déployer rapidement un changement de schéma universel, mais bon pour déployer des changements de schéma comme un déploiement progressif entre les locataires.
table partagée fonctionne mieux pour les situations où vous avez beaucoup de locataires et que beaucoup de vos locataires ont très peu de données. Un exemple de ceci serait une application mobile médiale sociale qui permet des comptes gratuits et a donc des milliers de comptes abandonnés. Les autres avantages du modèle de table partagée sont les suivants:
Le principal inconvénient de la table partagée est la nécessité d'ajouter la condition de filtre de locataire à chaque requête de la couche application. C'est aussi problématique parce que:
Donc, quel modèle "fonctionne mieux" dépend vraiment des compromis qui vous font le plus mal.
Il existe également un modèle hybride, "tenant-view", où les données réelles sont stockées dans des tables partagées, mais chaque connexion d'application utilise vues de barrière de sécurité pour afficher les données. Cela présente certains des compromis de chaque modèle. Principalement, il présente les avantages de sécurité du modèle de schéma de locataire avec certains des inconvénients de performances des deux modèles.