Je suis développeur SQL (pas DBA ni architecte) pour une petite entreprise SaaS (~ 50 employés). Je suis chargé de trouver comment:
- Déchargez les rapports opérationnels de nos 100+ bases de données OLTP
- Autoriser l'exécution de ces rapports sur les données de plusieurs bases de données client
- Positionner notre entreprise pour fournir plus de solutions basées sur l'analyse à l'avenir
J'ai lu un certain nombre d'articles sur diverses technologies comme la réplication transactionnelle (en particulier le modèle d'abonné plusieurs-à-un / central), le courtier de services SQL, l'envoi de journaux, Change Tracking (CT) et Change Data Capture (CDC, je crois comprendre que c'est uniquement pour les entreprises), et je ne sais pas quelle est la meilleure voie à suivre.
J'espère que certains d'entre vous possédant une expertise en matière d'intégration auront peut-être rencontré une configuration similaire à la nôtre et pourront me montrer la voie à suivre ou me diriger vers des ressources qui pourraient être utiles.
En raison de contraintes de coût, notre solution doit fonctionner dans SQL Server Standard Edition. De plus, la solution doit être raisonnable à soutenir / maintenir au sein de notre petite organisation.
Configuration de base:
Nous avons actuellement plus de 100 bases de données client individuelles, la plupart déployées sur des serveurs SQL dans notre centre de données, mais certaines déployées sur des serveurs clients dans leur centre de données dans lesquels nous pouvons nous éloigner. Ce sont toutes des bases de données SQL Server 2008 R2, mais nous prévoyons de passer à SQL 2016 prochainement.
Nous utilisons des projets de base de données et des dacpac pour garantir que le schéma est le même dans toutes les bases de données client qui seraient intégrées. Cependant, comme nous ne forçons pas tous les clients à mettre à niveau vers de nouvelles versions en même temps, certaines différences de schéma sont possibles entre les mises à niveau. La solution doit être suffisamment flexible pour ne pas se casser si le client A est sur la version 1.0 du logiciel et le client B est sur la version 1.1.
Les rapports opérationnels sont actuellement exécutés directement à partir de la base de données OLTP de chaque client. Nous sommes préoccupés par l'impact que cela aura sur les performances de l'application si nous ne la déchargeons pas.
Exigences de haut niveau:
Nos clients sont des départements de traitement stérile des hôpitaux (SPD) qui souhaitent des rapports à jour sur ce qu'ils ont traité jusqu'à présent, où se trouve l'inventaire, etc. Étant donné que l'un des principaux objectifs de cet effort est de mieux prendre en charge les rapports opérationnels, nous souhaitons que les données soient aussi proches que possible du temps réel pour continuer à répondre aux besoins des clients.
Actuellement, nous avons certains SPD dans des bases de données distinctes qui font en fait partie du même système hospitalier. Ces clients souhaitent pouvoir rapporter tous les SPD de leur système.
Stratégiquement parlant, nous aimerions pouvoir agréger facilement les données de tous nos clients pour soutenir nos initiatives d'analyse interne. Nous nous attendons à ce que nous puissions utiliser les données opérationnelles collectées comme source pour les dépôts de données / entrepôts.
Pensées jusqu'ici:
La réplication transactionnelle semble fournir la solution la plus "en temps réel". J'ai trouvé cette réponse particulièrement utile, mais je crains qu'avec le potentiel de différences de schéma, cela ne fonctionne pas pour nous: réplication plusieurs à un SQL Server
L'envoi de journaux ne semble pas idéal étant donné que le journal ne peut pas être restauré lorsque les requêtes sont actives. Soit je dois expulser tout le monde pour que le journal puisse être restauré, soit les données deviendront périmées. Je ne sais pas si cette méthode pourrait être utilisée pour centraliser les données de plusieurs bases de données, car chaque journal expédié ne concernerait que la base de données individuelle dont il est issu.
À l'aide de SQL Service Broker, la latence peut être imprévisible si une file d'attente n'a pas pu suivre le nombre de messages à traiter.
CT identifie uniquement une version pour chaque ligne de table. La latence dépendrait de la rapidité avec laquelle nous pourrions traiter quelque chose comme un package SSIS sur chaque base de données pour récupérer les données et les insérer dans un référentiel central.
Faut-il envisager de répliquer chaque base de données individuellement, puis peut-être utiliser une sorte de technique de virtualisation des données pour combiner les données des différentes sources répliquées?
Tout conseil ou orientation que vous êtes prêt à fournir serait grandement apprécié.