2010-07-29 27 views
2

Je dois activer une application Web multi-locataire en utilisant l'approche de schéma de base de données séparée. L'application est construite en utilisant Java/J2EE et Oracle 10g.Comment implémenter la stratégie multi-hébergée "Base de données partagée, schéma séparé"

Je dois avoir un seul serveur d'applications utilisant une base de données partagée avec plusieurs schémas, un schéma par client.

Quelle est la meilleure approche de mise en œuvre pour y parvenir? Que faut-il faire au niveau du niveau intermédiaire (app-serveur)?

  • Dois-je avoir plusieurs en-têtes d'hôte par client?
  • Comment puis-je me connecter au schéma correct dynamiquement en fonction du client qui accède à l'application?
+0

http://stackoverflow.com/questions/19177117/saas-multi-tenant-separate-database-model-implementation-in-java – techuser

Répondre

0

À un niveau élevé, voici quelques points à considérer:

  • Vous voulez probablement cacher les considérations de location de développement au jour le jour. Ainsi, vous voudrez probablement le cacher autant que possible dans votre infrastructure et le garder séparé de votre logique métier. Vous ne voulez pas toujours vérifier si le contexte dans lequel vous êtes ... vous voulez juste être dans ce contexte. Si vous utilisez un modèle d'unité de travail, vous devez vous assurer que toute unité de travail (à l'exception d'une unité fonctionnant dans un contexte purement d'infrastructure et non dans un contexte métier) s'exécute dans le contexte d'un seul locataire. . Si vous n'utilisez pas le modèle d'unité de travail ... peut-être que vous devriez l'être. Je ne sais pas comment vous allez suivre les conseils dans le point ci-dessus (mais peut-être que vous serez en mesure de trouver un moyen).
  • Vous souhaitez probablement placer un ID de locataire dans l'en-tête de chaque requête HTTP ou de messagerie. Probablement préférable de garder cela hors du corps sur le principe de l'éloigner de la logique de l'entreprise. Vous pouvez vous débarrasser de tout cela dans les coulisses et vous assurer que, dans les coulisses, il soit placé sur tous les messages/demandes sortants.
  • Je ne suis pas familier avec Oracle, mais dans SQL Server et je crois en Postgres, vous pouvez utiliser l'emprunt d'identité comme un moyen de changer de locataire. C'est-à-dire, plutôt que de paramétrer le schéma dans chaque commande et requête SQL, vous pouvez avoir un seul utilisateur SQL (sans connexion associée) qui a le schéma pour le locataire associé comme schéma par défaut, puis quitter le schéma votre SQL au jour le jour. Vous devrez intercepter les appels à la base de données et les placer dans un appel d'usurpation d'identité. Comme je le dis, je ne sais pas exactement comment cela fonctionne dans Oracle, mais c'est l'idée générale pour SQL Server.
  • L'authentification et la sécurité sont une grande préoccupation ici. C'est loin au-delà de la portée de ce que je peux discuter dans cette réponse, mais assurez-vous que vous obtenez ce droit.