entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Consulta a 2 bbdd que estan en 2 servidores distintos en mysql

Hola a todos.

Tengo una duda que lleva en mi cabeza mucho tiempo.

Tengo que hacer una consulta que me obtenga datos de una bbdd y necesito cruzarlos con otra consulta que está en otra bbdd en otro servidor.

La idea es algo asi: select * from server1.bbdd1.table1 inner join server2.bbdd2.table2

Trabajo con PHP y codeigniter y en otras ocasiones lo que he hecho es guardar el resultado de las consultas en dos arrays y tratarlos así, pero yo creo que tiene que haber algo que mediante PHP o mysql pueda ejecutar la consulta como pongo más arriba.

¿A alguien le ha surgido esta necesidad alguna vez? ¿Como lo habéis resuelto?

Muchas gracias de antemano.

1 Respuesta

2votos

carlossevi Puntos63580

Lo que comentas resulta imposible "físicamente". Para realizar una consulta a una base de datos necesitas abrir una conexión con la misma:

Conexión con RDBMS

Por lo tanto cada consulta se realiza únicamente a un servidor y entre ellos no tienen visibilidad. No tienes otro remedio que hacer el trabajo del lado de tu aplicación (o conseguir que la tabla sobre la que quieres hacer JOIN esté en el servidor 1, bien mediante consultas, replicación...)

0voto

cespe comentado

Hola carlossevi.

Gracias por tu respuesta.

Me temía que no se pudiera hacer, pero entonces partiendo de que no puedo replicar la tabla en el servidor, ¿como soleis resolver este problema?

En otras ocasiones lo que he hecho es guardar el resultado en un array y recorrerlo pero en este caso creo que iria muy lento porque son más de 10000 registros.

He pensado en hacer una tabla temporal en el segundo servidor con el resultado de la query y entonces hacer el inner a esta tabla pero no se si hay otras soluciones más eficientes.

Muchas gracias de nuevo.

0voto

carlossevi comentado

Mueve tu respuesta a comenario de mi respuesta =)

Respecto a la solución que propones, a mi me gusta, pero con matices:

  1. Consultas la tabla en servidor 1
  2. Insertas el resultado como tabla temporal de servidor 2
  3. Consultas con JOIN de tablas en servidor 2

Eso sí: sólo me gusta como solución a un problema puntual, tareas de mantenimiento o algo que ejecutes manualmente, nunca como parte del proceso habitual de trabajo ya que si la tabla es grande vas a generar un montón de inserciones cada vez, además de que al ser una tabla temporal seguramente no tengas buenos índices y el rendimiento no estará optimizado.

0voto

cespe comentado

Es para casos puntuales porque esta consulta se realiza una vez por semana.

¿que me recomiendas hacer si en otros casos necesito consultar estas 2 bbdd en el flujo normal de la app?
¿que te parece mi solución con arrays? ¿que se suele hacer en estos casos?

muchas gracias por la ayuda.

0voto

carlossevi comentado

Depende de la complejidad de la consulta. Si el join se hace para añadir datos que están en otra tabla, puedes hacerlo desde código. Si va a servir para subconsultas más complejas con agregaciones (sumas, máximos...) pues sí que te interesa que la tabla esté alojada en el RDBMS y que pueda operar con ella.

Si la consulta es costosa y tiene frecuencia, en lugar de una tabla temporal yo crearía una tabla fija en la BBDD que tomes como referencia (con su estructura, indizado...) y la rellenaría cuando la vayas a necesitar.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta