Problemas sincronización bases datos SQL Server y MySQL

IamOrion

Beta
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Usuario nuevo
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
23 Feb 2024
Mensajes
62
Hola estoy tratando de realizar mi primer trabajo aunque debo decir que no me ha ido del todo bien debo hacer un script para sincronizar sql serve y mysql el problema radica en que la base de datos tienes un diseño un tanto peculiar y hay tablas que no poseen id mi pregunta seria como pueod hacer para evitar la duplicacion de los datos o simplemente la sincronizacion ya que desconozco si existe alguna ayuda que me permita realizarlo aunque debo decir que puedo contratar un servicio de terceros como algun software ya que debe ser un script que se pueda ejecutar n veces para sincronizar la base de datos cada x tiempo muchas gracias
1709907294551.png
Este seria mi avance esta escrito en python
 

Aquiles22

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
Usuario nuevo
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
5 Mar 2024
Mensajes
90
Haber no soy muy experto en ese tema por lo que te recomiendo busques ayuda profesional para poder hacer una buena sincronización de las bases sin que pueda o llegase a ser duplicada o copiada por otra persona
 
Upvote 0

moiseseccam

Pi
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
5 Mar 2013
Mensajes
6.327
Mínimo debes pasar el modelo relacional de ambas bases de datos para entenderte
 
Upvote 0

Aquiles22

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
Usuario nuevo
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
5 Mar 2024
Mensajes
90
Upvote 0

Moshii

Alfa
Verificación en dos pasos desactivada
Verificado por Whatsapp
Usuario nuevo
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
22 Feb 2024
Mensajes
21
Puedes hacer lo siguiente a tu codigo implementarle los "trigger" para que cada vez que se actualice alguna tabla o ocurra algún evento este te sirva para poder actualizar ese evento en la otra bd
 
Upvote 0

Alfredo Ramos

Beta
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
5 Abr 2022
Mensajes
79
Te recomendaría que buscaras herramientas para replicación de bases de datos como SymmetricDS, en lugar de crear uno propio.

Hay varias soluciones open source y de pago.

Si no, y quieres hacer todo de forma manual y rudimentaria, tendrías que analizar cada tabla y validar muy bien para validar que no exista ya ese registro con columnas clave (que te permitan identificar de forma única ese registro, no llaves primarias o foráneas) antes de insertarlo (SELECT -> INSERT).

Aunque eso evidentemente es poco eficiente, es menos probable que tengas problema de registros duplicados, esperando que por lo menos tengan alguna constraint UNIQUE.
 
Upvote 0

OscarAlderete

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
8 Oct 2022
Mensajes
61
Puedes hacer lo siguiente a tu codigo implementarle los "trigger" para que cada vez que se actualice alguna tabla o ocurra algún evento este te sirva para poder actualizar ese evento en la otra bd
Esta idea peca de ingenuidad, los triggers son eventos que se realizan sobre la propia base de datos, y en este caso necesitas interactuar con otra base de datos.
 
Upvote 0

OscarAlderete

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
8 Oct 2022
Mensajes
61
Te recomendaría que buscaras herramientas para replicación de bases de datos como SymmetricDS, en lugar de crear uno propio.

Hay varias soluciones open source y de pago.
Si no, y quieres hacer todo de forma manual y rudimentaria, tendrías que analizar cada tabla y validar muy bien para validar que no exista ya ese registro con columnas clave (que te permitan identificar de forma única ese registro, no llaves primarias o foráneas) antes de insertarlo (SELECT -> INSERT).

Aunque eso evidentemente es poco eficiente, es menos probable que tengas problema de registros duplicados, esperando que por lo menos tengan alguna constraint UNIQUE.
Algo hecho a medida no tiene que ser "rudimentario", el resultado depende de las capacidades del programador.

En este caso lamentablemente estamos ante alguien cuyos conocimientos son limitados, eso es evidente cuando menciona que "hay tablas que no poseen id" y es que si se trata de "tablas puente", que son tablas que establecen relaciones entre tablas -no quiero complicar más las cosas pero es necesario decir que estas tablas gestionan relaciones 1 a 1, 1 a muchos, muchos a muchos- son tablas que no contienen IDs pues su labor no es almacenar datos sino vínculos.
 
Upvote 0

Alfredo Ramos

Beta
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
5 Abr 2022
Mensajes
79
Algo hecho a medida no tiene que ser "rudimentario", el resultado depende de las capacidades del programador.

En este caso lamentablemente estamos ante alguien cuyos conocimientos son limitados, eso es evidente cuando menciona que "hay tablas que no poseen id" y es que si se trata de "tablas puente", que son tablas que establecen relaciones entre tablas -no quiero complicar más las cosas pero es necesario decir que estas tablas gestionan relaciones 1 a 1, 1 a muchos, muchos a muchos- son tablas que no contienen IDs pues su labor no es almacenar datos sino vínculos.
Desde luego, mencioné rudimentario por el código que muestra en su captura de pantalla.
 
Upvote 0

webcoder

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
9 Ago 2023
Mensajes
92
Los updates no lo actualizas?. Segun lo que estas haciendo no tenes muchas opciones o forzas a que tengan un id unico o bien determinas una "unique key" en la tabla con la que puedas detectar que registro es nuevo sumando varias columnas.
Otra opcion es como dicen un trigger, entonces en cada tabla a sincronizar pones un trigger que inserte en una tabla auxiliar y que la sincronizacion tome el registro desde ahi, lo bueno de este metodo que no solamente te cubre el insert sino tambien el delete y el update, la tabla auxiliar que sea identica a la tabla original con un indicador de operacion por si es insert, update o delete.
Si queres hacer algo mas dinamico y vas a tener que trabajar bastante mas. No me parece una tarea para un principiante pero bueno, exitos.
 
Upvote 0

OscarAlderete

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
8 Oct 2022
Mensajes
61
Los updates no lo actualizas?. Segun lo que estas haciendo no tenes muchas opciones o forzas a que tengan un id unico o bien determinas una "unique key" en la tabla con la que puedas detectar que registro es nuevo sumando varias columnas.
Otra opcion es como dicen un trigger, entonces en cada tabla a sincronizar pones un trigger que inserte en una tabla auxiliar y que la sincronizacion tome el registro desde ahi, lo bueno de este metodo que no solamente te cubre el insert sino tambien el delete y el update, la tabla auxiliar que sea identica a la tabla original con un indicador de operacion por si es insert, update o delete.
Si queres hacer algo mas dinamico y vas a tener que trabajar bastante mas. No me parece una tarea para un principiante pero bueno, exitos.
Tengo varios años trabajando haciendo aplicaciones profesionales para internet -habiendo comenzado en el mundo de la informática haciendo sistemas de gestión de bases de datos- y juro que apenas entiendo lo que quiere decir el usuario webcoder!!! 🤔🤔🤔
 
Upvote 0

webcoder

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
9 Ago 2023
Mensajes
92
Tengo varios años trabajando haciendo aplicaciones profesionales para internet -habiendo comenzado en el mundo de la informática haciendo sistemas de gestión de bases de datos- y juro que apenas entiendo lo que quiere decir el usuario webcoder!!! 🤔🤔🤔

Viste lo que posteo el usuario? tiene un script en donde hace un select donde busca por id el registro, si no existe lo inserta. Entonces mi pregunta inicial es: si no procesa los update porque si busca por si existe el id o no, solo tiene en cuenta los inserts, no las operaciones de update aunque posiblemente forma parte de otro proceso, por eso es mi pregunta. Siguiendo la solución que el encontró solo queda forzar un id o bien buscar en las tablas en las que no tienen normalizado el id, una combinacion de campos que sirva como unique key( si no sabes el concepto de unique key te invito a googlearlo).
Planteo una alternativa, entre las mas sencilla de implementar que es poner un trigger( si no sabes el concepto de trigger te invito a googlearlo)., y por cada operación se inserte en una tabla intermedia, esa tabla tiene que ser idéntica a la tabla original pero con un campo mas que indique la operación(Insert, delete, o update). Luego el sincronizador lee esa tabla, mira la columna indicadora de la operación y realiza la operación correspondiente.
Ahora bien, volviendo al script que tiene veo que lo quiere hacer dinámico, en ese caso habría que trabajar mas para leer la definición de tablas y almacenar o en tablas genéricas o generando tablas auxiliares para replicar la información a sincronizar.
 
Upvote 0

OscarAlderete

Beta
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
8 Oct 2022
Mensajes
61
😂😂😂 yo me refería a tu semántica/gramática/sintaxis pero claro, tu alternativa tampoco va por buen camino pues ya lo dije antes, los triggers solo afectan las tablas de una misma DB y cuando se trata de hacer un sync entre 2 DB distintas ya no funciona!
Hoy estoy con algo de free time así que me voy a poner didáctico antes de que mi trabajo comience -sí, yo trabajo en 'semana santa' pero es porque trabajo para una empresa de USA y en gringolandia no existen los feriados religiosos, soy ateo así que eso me viene bien, y antes que la lástima los comsuma déjenme decirles que a cambio te pagan muy bien, más aún si estás extremadamente bien calificado como yo-.
Eso me recuerda algo; hace años trabajaba para una agencia española situada en Alcoy, Comunidad Valenciana, era una agencia pequeña pero hicimos cosas muy ambiciosas. Volviendo al tema, era una agencia localizada en una región donde la tradición es celebrar la semana santa como si Franco todavía gobernase, es decir feriado de 'jueves santo' hasta 'lunes de resurrección': 5 días!!!!
Una nota aquí, como desde niño he sido bueno con las matemáticas me parecía raro que la cucufatería dijera ('cucufatería' es un peruanismo para referirse a las gente extremadamente religiosa/pía): 'jesusito murió un viernes y al 3er día resucitó', y si hacías las cuenta pues no salía, si te mueres un viernes y resucitas al 3er día, tu resurrección debe ser el lunes!!! Como yo era un niño para quien un feriado menos significaba un día más de escuela, esa situación no solo era confusa sino también enervante.
No sería hasta unos años después cuando leyendo acerca de la historia del Perú en los 70s cuando me enteré que fue algún gobierno militar que buscando minimizar la influencia de la iglesia en la gente trató de 'cargarse' el apogeo religioso y así la semana santa perdió un día y en navidad la imaginería político-militar peruana creó al niño Manuelito nacido en un pueblo de los andes para sobreponerse a la idea del niño Jesús nacido en un pesebre de Belén!!!!
Creo que algo parecido ocurrió en otras partes de LA y es por eso que aquí la semana santa solo dura en su mejor parte de un break de jueves a domingo, y cuando digo 'su mejor parte' me refiero que no incluyo 'domingo de ramos' pues ese día solo es de fiesta para las abuelas 😆😆😆.
Volviendo una vez más al tema de sincronizar DBs, seguramente hay varias formas de hacerlo yo alguna vez usé en una app que tenía que almacenar datos incluso sin internet y luego hacer un sync cuando la conexión estuviese disponible -ojo, al tratarse de una app la DB era bastante simple en estructura pero la técnica sigue siendo válida- y es que las tablas tenía un campo 'sync', boolean y false by default. Por lo tanto había un evento en la app que se desencadenaba cuando la conexión estaba disponible, este evento era muy simple: un query para obtener el count de los registros donde 'sync=false' (antes que algún sabihondo salte diciendo que las comparaciones en programación se hacen con '==' o '===' en SQL el comparer es '='); si el 'count > 0' haces la sincronización.
Así d simple!!!! Sigan disfrutando su easter.....
 
Upvote 0

Weyne

Alfa
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Jun 2020
Mensajes
15
Entonces en base a lo leido en este hilo, una solución posible sería:

1. Añadir el campo sync (bool default false) a todas las tablas que van a trabajarse la sincronización
2. Añadir un trigger para las acción UPDATE para que en caso el registro ya fue sincronizado se cambie a false para que se tome en la siguiente ejecución del script python.
3. Modificar el script python para que dentro del select añada la condición sync=false.

Saludos.
 
Última edición:
Upvote 0

jmdoren

Épsilon
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
31 May 2016
Mensajes
789
Un poco de contexto
¿Sincronizar es que haces cambios en cualquiera de las dos y lo replicas en la otra o es una la master y la otra la esclava?
¿Funcionan en la misma màquina?
¿quién actualiza los datos (me refiero aplicación(es) no personas)?
 
Upvote 0

jmdoren

Épsilon
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
31 May 2016
Mensajes
789
Esta idea peca de ingenuidad, los triggers son eventos que se realizan sobre la propia base de datos, y en este caso necesitas interactuar con otra base de datos.
Puedes poner un trigger para meter el evento en una cola de mensajería y en el otro lado vas consumiendo los mensajes, con Kafka por ejemplo
 
Upvote 0

Weyne

Alfa
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Jun 2020
Mensajes
15
Puedes poner un trigger para meter el evento en una cola de mensajería y en el otro lado vas consumiendo los mensajes, con Kafka por ejemplo

yo pude ver una implementación parecida en un trabajo anterior y funcionaba bien, hasta que la tabla se volvió transaccional y se tuvo que descartar esa opción por una donde se replicaba la información en un horario determinado, ya que a priori se sabia que habia un horario de modificación y en el resto del día ya no habia movimiento sobre la tabla.
 
Upvote 0

¡Regístrate y comienza a ganar!

Beneficios

  • Gana dinero por participar
  • Gana dinero por recomendarnos
  • Descubre ofertas de empleo diariamente
  • Negocios seguros
  • ¡Información premium y más!

Acceder

¿Ya tienes una cuenta? Accede aquí

Arriba