by:

Ich bin seit Jahren MySQL Benutzer aus Überzeugung und verwende es in nahezu jeder Webanwendung, die ich programmiere.
Allerdings häufen sich in letzter Zeit Anwendungsszenarien, die sich mit MySQL etwas schwierig gestalten...
Bevor ich jedoch meine Contraliste ausfahre, möchte ich noch ein paar positive Worte finden...

"MySQL ist eine tolle relationale Datenbank, solange man keine relationale Datenbank braucht" (Unknown)

Pro:
MySQL ist OpenSource
MySQL läuft auf nahezu jeder Platform
MySQL ist schnell und zuverlässig

Entgegen vielen anderen Berichten im Netz, ist auf meiner Contraliste die folgende Aussage nicht zu finden:
MySQL kann keine Transaktionen und Stored Procedures.
Dies ist schlicht nicht mehr der Fall, allerdings gibt es ein paar andere Limitationen in MySQL und damit komme ich nun zu den Contra Punkten.

Es ist nicht möglich Transaktionen in Stored Procedures oder Funktionen auszuführen.

Es ist nicht möglich eine Tabelle in mehrere Partitionen zu teilen, (diese auf mehreren Hosts zu verteilen)
und parallel abzufragen.

Es ist nicht möglich variable Tabellennamen in Triggern zu verwenden.

Es ist nicht möglich ein Update auf sich selbst zu machen (ausser mit dem Umweg über einen View)

Vereinfachtes BSP:
update test set x="y" where id in (select id from test)

Interessant finde ich die Interpretation von "between".
"Between" ist für mich "zwischen", between 1 and 3 wäre folglich 2.
MySQL interpretiert "between" aber als eine range (from - to).
Folgendes Beispiel ergibt daher true:

Between 1 and 3 = 1,2,3

select 1 between 1 and 3
select 2 between 1 and 3
select 3 between 1 and 3

Interessanterweise interpretiert Postgres between 1 and 3 als 2 und 3. Irgendwie verwirrend...

Was mich auch sehr stört ist, dass in MySQL von Haus aus keine effiziente Lastenverteilung möglich ist.

Um es kurz zu machen, ich glaube MySQL hat bei Webanwendungen einen guten Platz gefunden,
wo es sich behauptet kann, allerdings bleibt abzuwarten, was nach der Übernahme
von Oracle aus MySQL wird.

Ich für meinen Teil würde mir wünschen, dass MySQL wieder unabhängig von Sun und Oracle wird, aber
das ist natürlich eher ein Wunschtraum der sich in der nahen Realität wohl kaum verwirklichen wird.

Mich würde sehr interessieren was euch an MySQL gefällt und was nicht.

LG
Andreas


Kommentare

by:

Nach meinen ersten Tests mit Sqlrelay und MySQL - Proxy denke ich es ist an der Zeit davon zu berichten.

sqlrelay

Sqlrelay verspricht Datenbankanwendungen stabiler und schneller zu machen und unterstützt dabei noch eine breite Palette von Datenbanksystem.

Die Installation kann bei Debian Systemen einfach über das Paketverwaltungstool apt-get gemacht werden. Ich persönlich habe auf Debian Testing-Pakete zurückgegriffen. Die Konfiguration geschieht über eine XML Datei, die für den Anfänger vielleicht etwas zu viel des guten ist.

Es gibt drei Möglichkeiten seine PHP Applikation mit dem sqlrelay Daemon zu verbinden.

  1. Pear DB2 (hat einen sqlrelay Treiber)

  2. Mysql Drop in Replacement

  3. PHP sqlrelay api

Leider habe ich auf die neuere MDB2 api gesetzt für die es derzeit noch keinen sqlrelay Treiber gibt, weshalb für mich nur das mysql drop in replacement in Frage kam.

Nachteil von sqlrelay in meinen Augen ist, dass es nicht möglich ist eine größere Abfrage auf mehrere Nodes zu verteilen, was gleichzeitig auch der Vorteil von mysql-proxy (mit h-scale plugin) ist.

mysql-proxy

Die Installation von mysql-proxy geht ebenfalls über das Packetverwaltungstool apt-get, will man allerdings die aktuellste Version haben ist etwas Handarbeit erforderlich.

In neueren Versionen von mysql-proxy ist das read-write Splitting bereits vorhanden, was besonders bei Master/Slave Setups nützlich ist. Die Konfiguration ist für meinen Geschmack etwas einfacher als beim sqlrelay, man gibt einfach seinen Master und die Slaves an, und übergibt den Port auf dem der Mysql-Proxy laufen soll.

Seiner Applikation braucht man dann auch nur noch den Host und Port vom Proxy mitteilen, und die Lastenverteilung läuft schon, ebenso kann mysql-proxy mit ausgefallenen Nodes umgehen.

Nachteil von mysql-proxy ist evtl. das es nur MySQL ansprechen kann und nicht wie sqlrelay mit anderen DBs kommuniziert. Ausserdem ist mir beim Testen aufgefallen, dass unter starker Last der Arbeitsspeicher rauf geht, was auf einen Memoryleak schliessen lässt (evtl. in aktuellen Versionen schon behoben).

Last but not least

postgres-r

Bei meinen Recherchen bin ich noch auf postgres-r gestossen, was ein Master/Master Replicationssystem für Postgresql darstellt.

Tests sind zwar noch aus ständig, generell kann man aber sagen das postgresql eine stabile, mit vielen Funktionen bestückte Datenbank ist, die evtl mehr den fortgeschrittenen Programmierer anspricht.

 

Fazit

Für den Standard Mysql Benutzer empfehle ich mysql-proxy, das auch bald in den mysql-cluster einfließen wird. Da es einfach zu installieren ist und man wenig Änderungen am System und den Anwendungen machen muss.

Für den Produktivbetrieb empfehle ich Postgresql, da es eine robuste, mit vielen Funktionen erweiterbare, Datenbank ist.

Generell sollte man einiges beachten bevor man sich einen Datenbank Cluster zulegt. Ich habe schon viele schlecht programmierte Webanwendungen gesehen, die durch falsch gesetzte Indexe und schlecht geschriebene Abfragen mehr als 10 mal so lange brauchen und weitaus weniger Anfragen entgegen nehmen können als äquivalente Anwendungen. Außerdem sollte man beachten das nicht jede Anwendung von Haus aus Lastverteilung unterstützt, fragen die man sich dabei stellen sollte sind z.B. wo werden Sessiondaten gespeichert (default im Filesystem), wo die Benutzerdaten (Bilder..). Man muss sich also zumindest Gedanken machen wie man die Daten repliziert, bei Sessiondaten eignet sich z.B. ein session handler, bei den Benutzerdaten gibts viele Ansätze (siehe drbd, c oder r sync, nfs usw.).

Ein oft gemachter Fehler in Lasten verteilten Systemen ist die Sprache selber, Marketingleute verwechseln gerne Lastverteilung mit Ausfallsicherheit. Man sollte sich auch Gedanken über den Single Point of Failure machen, sowie drauf achten, das der Lastenverteiler diesen nicht selbst darstellt. In ausfallsicheren Systemen sind diese, sowie im Idealfall alle anderen Komponente, redundant (also doppelt vorhanden).

Ich hoffe ich konnte einen kleinen nicht all zu technischen Überblick über die verschiedenen Vor- und Nachteile der vorgestellten Systeme geben und wünsche im Sinne von Linux "have a lot of fun"

Andreas

 

Quellen:

sqlrelay http://sqlrelay.sourceforge.net/

mysql-proxy http://forge.mysql.com/wiki/MySQL_Proxy

hscale http://hscale.org

postgres-r http://postgres-r.org/

lvs http://www.linuxvirtualserver.org/

drbd http://www.drbd.org

rsync http://rsync.samba.org/


Kommentare


Seiten: