SQL Abfrage über mehrere Datenbanken

pp3345

Lieutenant
Registriert
Feb. 2008
Beiträge
637
Ich bastele derzeit an einem Projekt mit PHP und MySQL. Nun müsste ich einen JOIN über mehrere Datenbanken konstruieren, es ist nicht möglich die Datenbanken zusammenzufassen. Die Datenbanken liegen auf unterschiedlichen Servern. Gibt es eine einfache Möglichkeit, das mit einer einzelnen Abfrage zu realisieren?

MfG
pp3345
 
Es würde mich sehr wundern, wenn das ginge. Eine Abfrage richtet sich ja immer an einen bestimmten Server; Datenbanken von zwei verschiedenen Servern gleichzeitig abzufragen, dürfte also nicht funktionieren.
 
Hi,

ich denke ehrlich gesagt wie NullPointer nicht, dass das klappen kann. Ich lasse mich gerne eines Besseren belehren aber die Erklärung wäre mir genauso eingefallen wie NullPointer es geschrieben hat.

VG,
Mad
 
Es geht zwar mit mehreren Datenbanken aber mit unterschiedlichen Servern wohl eher nicht. Denn Du musst ja erstmal die Verbindung aufbauen und daran sollte es scheitern.
Mit mehreren DBs sähe es übrigens so aus:
SELECT db1.tabelle.feld_a, db1.tabelle.feld_b, db2.tabelle_c.feld_h FROM db1.tabelle
INNER JOIN db2.tabelle_c
ON db1.tabelle.feld_a = db2.tabelle_c.feld_h
LIMIT 30
 
Abfragen auf mehrere Datenbanken auf einem Server sind kein Problem, aber wie MadMan1209 schon gesagt hat, du stellst die Abfrage an einen Server, mehrere Server sind auch immer mehrere Abfragen.
 
Hmm, OK, schade, dass es so nicht geht. Wie könnte ich das denn effizient in zwei Abfragen splitten? Ich möchte dann halt zuerst aus der Datenbank auf einem Server etwas abfragen und dann die dazu passenden Daten vom zweiten Server. Mir würde jetzt spontan nur eine Schleife einfallen, die viele Abfragen ausführt, aber es müsste doch auch einfacher und effizienter gehen, oder?
 
Hi,

welche korrespondierende Programmiersprache benutzt du denn? Oder als "reines" SQL-Script?

VG,
Mad
 
Ansonsten sammle doch alle Tabellen in einem extra "DWH" und fahre darauf deine Abfrage, falls du dieses Ziel öfter vor hast. Halt so ne Art Datenbank als Zwischenspeicher.
 
Keine Ahnung wie das bei MySQL läuft aber unter Oracle lässt sich das mithilfe von DB Links bewerkstelligen. Dabei wird einfach eine Art Alias für eine "entfernte" Datenbank angelegt (wobei entfernt der gleiche als auch ein anderer Server sein kann) über welchen man wie auf eine lokale DB zugreifen kann. Evtl schaust du mal ob es etwas ähnliches für MySQL gibt.
 
Versuche es möglichst so zu formulieren, dass du alle Ergebnisse mittels einer Abfrage bekommst (z. B. JOINs). Ansonsten kann es u. U. sehr langsam werden. Mit einer Schleife ist es sehr ungünstig.
 
Für MySQL ist mir eine solche Möglichkeit unbekannt.
Oracle oder MS SQL-Server ist so etwas kein Problem.
 
Ich möchte es ja irgendwie per JOIN formulieren, aber wie? Wäre es sinnvoll, auf dem zweiten Server erst alles in einer temporären Tabelle abzulegen, um dann damit einen JOIN zu machen? Es geht doch auch einfacher und effizienter, oder?

Das würde ja ungefähr so aussehen:

PHP:
$res = $link->query('SELECT x FROM a WHERE b = y');
$link2->query('INSERT INTO temp (x) VALUES (x), (x), (x)');
$res = $link2->query('SELECT y FROM b JOIN temp ON b.z = temp.x');
 
Erstaunlich, aber Mysql kann das auch:
http://dev.mysql.com/tech-resources/articles/mysql-federated-storage.html

Jetzt musst du für dich nur noch beantworten, ob es dir der Aufwand wert ist, das auch so einzurichten.
Das hängt natürlich auch davon ab, wie performant es sein muss. Der Hauptperformancekiller bleibt bei beiden die Latenz zwischen den Servern untereinander und dem Sender der Query.
 
Danke für die Info. Ich habe es jetzt erstmal mit Hilfe einer temporären Tabelle auf dem zweiten Server gelöst. Sollte die Performance irgendwann mal nicht mehr reichen, kann ich es wohl auch mal so probieren.
 
Zurück
Oben