Soy un desarrollador de SQL (no DBA o arquitecto) para una pequeña empresa SaaS (~ 50 empleados). Tengo la tarea de descubrir cómo:
- Descargar informes operativos de nuestras más de 100 bases de datos OLTP
- Permitir que esos informes se ejecuten contra datos de múltiples bases de datos de clientes
- Posicionar a nuestra empresa para proporcionar más soluciones basadas en análisis en el futuro
He leído varios artículos sobre diversas tecnologías, como la replicación transaccional (específicamente el modelo de abonado centralizado), el agente de servicios SQL, el envío de registros, el seguimiento de cambios (CT) y la captura de datos modificados (CDC, según tengo entendido). esto es solo para empresas), y no estoy seguro de qué camino es mejor seguir.
Espero que algunos de ustedes con experiencia en integración puedan haber encontrado una configuración similar a la nuestra y poder señalarme un camino exitoso o dirigirme a algunos recursos que serían útiles.
Debido a limitaciones de costos, nuestra solución debe funcionar dentro de SQL Server Standard Edition. Además, la solución debe ser razonable para apoyar / mantener dentro de nuestra pequeña organización.
Configuracion basica:
Actualmente tenemos más de 100 bases de datos de clientes individuales, la mayoría implementadas en servidores SQL en nuestro centro de datos, pero algunas implementadas en servidores de clientes dentro de su centro de datos en las que podemos acceder de forma remota. Estas son todas las bases de datos de SQL Server 2008 R2, pero estamos planeando actualizar a SQL 2016 pronto.
Utilizamos proyectos de bases de datos y dacpacs para garantizar que el esquema sea el mismo en todas las bases de datos de clientes que se integrarían. Sin embargo, dado que no obligamos a todos los clientes a actualizar a nuevas versiones al mismo tiempo, es posible que existan algunas diferencias de esquema entre las actualizaciones. La solución debe ser lo suficientemente flexible como para no romperse si el cliente A está en la versión de software 1.0 y el cliente B está en la versión 1.1.
Los informes operativos se ejecutan actualmente directamente desde la base de datos OLTP de cada cliente. Nos preocupa el impacto que esto tendrá en el rendimiento de la aplicación si no la descargamos.
Requisitos de alto nivel:
Nuestros clientes son departamentos de procesamiento estéril (SPD) de hospitales que desean informes actualizados sobre lo que han procesado hasta ahora, dónde está el inventario, etc. Dado que uno de los principales propósitos de este esfuerzo es respaldar mejor los informes operativos, nos gustaría que los datos estén lo más cerca posible del tiempo real para continuar satisfaciendo las necesidades de los clientes.
Actualmente tenemos algunos SPD en bases de datos separadas que en realidad son parte del mismo sistema hospitalario. Estos clientes desean la capacidad de informar contra todos los SPD en su sistema.
Hablando estratégicamente, nos gustaría la capacidad de agregar fácilmente datos a todos nuestros clientes para respaldar nuestras iniciativas de análisis interno. Nuestra expectativa es que podríamos usar los datos operativos recopilados como fuente para los almacenes / almacenes de datos.
Pensamientos hasta ahora:
Parece que la replicación transaccional proporcionaría la solución más "en tiempo real". Encontré que esta respuesta fue especialmente útil, pero me preocupa que con el potencial de diferencias de esquema no funcione para nosotros: la replicación de SQL Server Many-to-One
El envío de registros no suena ideal dado que el registro no se puede restaurar mientras las consultas están activas. Debo expulsar a todos para que se pueda restaurar el registro o los datos se volverán obsoletos. No tengo claro si este método podría usarse para centralizar datos de múltiples bases de datos, ya que cada registro enviado solo sería para la base de datos individual de la que proviene.
Con el servicio de SQL Service Broker, la latencia puede ser impredecible si una cola no puede mantenerse al día con la cantidad de mensajes a procesar.
CT solo identifica una versión para cada fila de la tabla. La latencia dependerá de la rapidez con que podamos procesar algo como un paquete SSIS en cada base de datos para recuperar los datos e insertarlos en un repositorio central.
¿Necesitamos considerar replicar cada base de datos individualmente y luego tal vez usar algún tipo de técnica de virtualización de datos para combinar datos de las diversas fuentes replicadas?
Cualquier consejo o dirección que esté dispuesto a proporcionar sería muy apreciado.