Programación > Otros
Integración de 2 sistemas de bases de datos diferentes Mysql SQLServer
santurario:
Hola foro,
Estoy analizando un problema, y quisiera saber si alguien ya ha realizado esto con anterioridad y pueda brindarme algunos consejos de como abordar el siguiente problema.
Tengo 1 sistema ERP, de código de cerrado, este es un sistema de escritorio, que se conecta una base de datos en SQLServer 2012, donde de como ya sabrán los módulos de un ERP son, recursos humanos, facturación, clientes, nomina, entre otros.
Hay otro sistema, Sugar CRM, que es como su nombre lo indica un sistema que permite gestionar las relaciones con lo clientes y que aunque soporta una conexión directa con sql server, por cuestiones ajenas, se ha implementado en un gestor de base de datos mysql, y aunque sugerí un cambio de motor de base de datos este fue negado.
Entonces, el problema es que necesito que la información de ciertas tablas, del ERP, por mencionar uno ejemplo, la tabla de clientes, se sincronice o replique, a la tabla clientes del Sugar CRM. Esto de manera bidireccional, es decir, si un cliente se ingresa desde el ERP, esto se refleje al momento de completar la transacción en el sistema CRM y si se ingresa en el CRM, que estos datos se actualicen en el ERP al concluir la transacción, digo al finalizar la transacción, para condicionarlo, que si y solo si un cliente es ingresado, estos datos de reflejen en el otro sistema.
Ahora bien, lo que yo he pensado de momento, es levantar un SOAP, con los métodos necesarios para realizar los cambios sobre las tablas que en cada sistema corresponda, de lado de CRM cuento ya con un SOAP, con métodos para realizar las operaciones sobre los datos en Mysql, sin embargo, en el ERP no cuento con ningún SOAP y es ahí donde tengo la idea de levantar un servicio SOAP, pero no veo una opción muy factible, para consumir el SOAP directamente desde SQL Server, lo único que he investigado y que aun estoy en POC, es sobre un procedimiento para realizar un postxml desde SQL server, aunque veo esto algo poco ideal.
Entonces, me gustaría saber si alguien ya ha pasado por una situación similar y que tenga ideas sobre como pueda abordar este problema, cualquier idea o sugerencia es bienvenida.
Saludos.
ravenheart:
Yo metería triggers en las tablas que quieras sincronizar para apuntar (en otra tabla) los cambios que se lleven a cabo, y actualizar a mano con una aplicación/servicio.
Esto no cumple tu condición de que se refleje al momento de completar la transacción, pero es que no creo que quieras eso. ¿Qué pasa si tu presunto SOAP está caído? ¿Esperas un minuto a que dé error de timeout y luego devuelves un error? ¿Y si se corrompe la base de datos del CRM? (me ha ocurrido más de una vez con mysql). ¿Te quedas sin ERP hasta que se arregle?
Quitando esa condición puedes hacer la sincronización independiente de la actualización de datos y cada sistema funcionaría perfectamente de manera independiente en caso de que el otro (o el servicio intermedio) falle. Y si lo diseñas bien, el tiempo de sincronización debería ser casi instantáneo (inferior a 1s).
¿Has pensado bien en la lógica? ¿Qué ocurre si desde el CRM te borran un cliente del ERP?
animanegra:
Con todo el respeto. ¿Eso no pide a gritos que utilicen el mismo sistema de base de datos? Replicar datos es la muerte. :\
Por otro lado ¿Este tipo de cosas no van por lo que intentas solucionar?
https://dbconvert.com/mssql/mysql/
Segun lo que dice mas o menos, dejas el demonio de sincronización y tararí. Va sincronizando a medida que necesita o ve que hay desincronización de bases de datos.
¿La aversion al cambio es porque no se ha usado un conector generico?
ravenheart:
--- Cita de: animanegra en Febrero 27, 2017, 03:04:55 pm ---Con todo el respeto. ¿Eso no pide a gritos que utilicen el mismo sistema de base de datos? Replicar datos es la muerte. :\
--- Fin de la cita ---
Entiendo que son sistemas ajenos que no están bajo su control.
--- Citar ---¿La aversion al cambio es porque no se ha usado un conector generico?
--- Fin de la cita ---
Yo no uso conectores genéricos, la verdad. Están muy bien cuando tienes una aplicación que lo hace todo. O varias escritas en el mismo lenguaje. Pero con un sistema complejo en PHP (o python, o java, o lo que sea) con aplicaciones en el servidor que hacen ciertas tareas y que normalmente van escritas en otros lenguajes, para no escribir cada consulta por duplicado (y por diferentes personas, con todo lo que eso conlleva), tiendo a usar procedimientos almacenados. Prefiero saber que cuando haya que soportar otro SGBD tengo que migrar un montón de código que está localizado.
Porque cuando empiezas a trastear con procedimientos y funciones SQL, el conector genérico solo vale para imprimir el código fuente y dejarlo en el servicio para emergencias.
ravenheart:
Y con esto no quiero decir que los genéricos sean malos o que no se deban usar. Lo que digo es que no son la panacea, y que antes de decidir si usarlos o no, hay que entender lo que nos dan y lo que nos cuesta usarlos.
Decisiones, decisiones.
Navegación
[#] Página Siguiente
Ir a la versión completa