Mysql: Tabellen als symLink einbinden

Mean

Grünschnabel
Hallo zusammen,

wir haben auf einem Debian-Server MySql laufen und auf diesem Server liegen mehrere Projekte, die alle auf bestimmte Tabellen zugreifen, die für jedes Projekt gleich sind (Statistikdaten).

Nun habe ich mir überlegt, ob es nicht möglich ist, MySql hat pro Tabelle ja 3 Dateien die diese repräsentieren, die Statistikdaten irgendwo zentral auf dem Server abzulegen und via symbolischem Link in jede Projekt-Datenbank einzubinden. Historisch gewachsen ist es so, dass nicht vorgesehen ist je nach Abfrage zwischen den Datenbanken zu wechseln (sprich eine zentrale Statistikdatenbank + X Projektdatenbanken), weshalb das wohl der einfachste Weg wäre.

Habt ihr eine Idee, ob sowas möglich ist (generell nur lesende Zugriffe auf die Tabellen) oder ob es Probleme geben kann, wenn von Projekt 1 und 2 (und evtl. noch mehr) auf dieselbe Tabelle zugegriffen wird?

Für uns wäre der Vorteil, dass wir uns die mehrere GB großen Tabellen nur einmal vorhalten müssten (also mehr Speicherplatz zur Verfügung hätten), bei Updates auf diese Tabellen die nur einmal ausgeführt werden müssten, etc.

Vielen Dank und viele Grüße,

Dirk
 
Ich kann mir nicht vorstellen, dass so was funktioniert, denn i.d.R. wollen die RDBMS ihre Datendateien exklusiv für sich haben. Ausprobiert habe ich es allerdings noch nicht.

Außerdem ist es nicht unbedingt so, dass MySQL 3 Dateien braucht. Das kommt auf den eingesetzten Datenbank-/Tabellen-Typ an. Bei InnoDB bspw. wird alles (außerdem Schema-Format) in eine Datei (ibdata[n]) geschrieben. Nur bei MyISAM gibt es myd und myi Dateien. Wobei myi Indizes und myd die Daten enthalten. frm sind die die Schema-Daten (Tabellen-Layout) sowohl für MyISAM als auch InnoDB.

Ich habe aber gerade mal bei meinem Server nachgesehen, ob die Dateien exklusiv gelockt sind, anscheinend nicht. Wäre aber die Frage, ob der Server beim starten den Versuch unternimmt, sie exklusiv zu locken. Ich schätze, das muss man ausprobieren.

ABER! Ein Zugriff von mehreren RDBMS dürfte trotzdem problematisch sein, vor allem, wenn man kein Tabellen-Locking beim Zugriff vornimmt. Dabei ist es egal, ob es ein lesender oder schreibender Zugriff ist.
 
Dann müsste man evtl. vielleicht doch mal schauen, ob es möglich ist eine 2.DB ins System einzubauen, die eben bei Zugriffen auf Tabelle A auf DB1 und bei Zugriffen auf Tabelle B auf DB2 geht. Wobei es dann wohl wieder bei JOINs von Tabelle A auf Tabelle B problematisch wird?!

Vielen Dank auf jeden Fall schon mal und viele Grüße,

Dirk
 
Wobei es dann wohl wieder bei JOINs von Tabelle A auf Tabelle B problematisch wird?!

Nein, das sollte kein Problem darstellen. Du musst halt das Schema (die Datenbank), in der die Tabelle liegt, mit angeben:

Code:
SELECT * FROM datenbank1.tabelle_a a
INNER JOIN datenbank2.tabelle_b b ON b.a_id = a.id
WHERE b.foo = 'bar';

Viel Spaß :)
 
Zurück