MySQLCluster als Ersatz für Memory-Tables?

coffeegirl

New Member
Hallo Leute,

ich habe in meinem PHP-Projekt, eine Art Game, eine Tabelle im Heap (Engine Memory, MySQL 5.1).
Diese könnte bei ernsthafter Userlast auf meinem Projekt recht groß werden (max. bis 100.000 Rows) und jede Row könnte sekündlich einen Write und 5-6 Reads erfahren.
Also Write:Read Verhältnis etwa 1:5.
Memory Engine kennt für Write nur Table Lock.

Ich fürchte daher, dass bei Anwachsen der Tabelle die Performance in die Knie gehen wird.
Also habe ich mir erstmal ein Partitionierungskonzept ausgedacht, um die (vor allem Write-)Last auf mehrere Tables zu verteilen. Das bedeutet natürlich zusätzliche Komplexität, u.a. da die Rows auch mal die Partition wechseln können.

Andererseits empfiehlt MySQL für diesen Fall nachdrücklich, auf MySQLCluster überzugehen. Dazu gibts auch schöne White-Papers, die aber sehr schnell auf die sonstigen Vorteile überschwenken, wie eben Redundanz und Clustering über mehrere physikalische Rechner. Diese Vorteile werde ich aber wohl nie nutzen können, da das Projekt demnächst auf einem einzelnen dedicated Server laufen soll, aber sicher nicht auf mehreren.

Auf meinem derzeitigen Mini-Bastelrechner mit 1G RAM kann ich MySQLCluster nicht sinnvoll installieren, um es zu testen. Das käme dann ggf. mit dem Dedi. Aber irgendwie kommt mir das ganze ziemlich heavy vor, um eigentlich nur einen Memory-Table zu ersetzen.

Deshalb ein paar Anfängerfragen.
1) Die dööfste zuerst: die anderen DBs (MyISAM, InnoDB) laufen mit einer MySQLCluster Installation doch hoffentlich auch noch, da es sich um ein erweitertes MySQL 5.1 handelt?
2) Hat das schon mal jemand gemacht, wegen der Write-Performance der Memory-Tables auf MySQLCluster überzugehen? Wie gesagt, auf einem einzelnen Server, d.h. ohne Clustering und Replikation. Wie sind die Erfahrungen? Wird der Zugriff im allgemeinen schneller, oder vielleicht sogar träger? Steigt der Speicherbedarf?

Ich stehe jetzt am Scheideweg: entweder mein Partitionierungskonzept implementieren, hoffen, dass das damit das Problem entschärft ist, und bei der Memory-Engine bleiben. Oder nicht partitionieren und später auf MySQL Cluster setzen.

Hat vielleicht jemand hier Anregungen, Denkanstöße, Erfahrungen mit diesem Thema?

Vielen Dank,
coffeegirl
 
Ehm, das ganze kommt mir ziemlich dööf vor. :D

MySQLCluster auf EINEM Server? Dafür braucht man mindestens 4, das ist das Konzept. Er dient ja zur Lastverteilung über mehrere physikalische Maschinen.. und nutzt übrigens eine eigene Storage Engine, NDB.
 
Ehm, das ganze kommt mir ziemlich dööf vor. :D

Ja, mir auch.

Mein Traum wäre ja die Memory Engine mit Row-Lock. War wohl sogar schon mal in Arbeit:
http://forums.mysql.com/read.php?94,220303,220303
Aber dieser Ansatz ist irgendwo im Nirwana verschwunden.

MySQLCluster auf EINEM Server? Dafür braucht man mindestens 4, das ist das Konzept. Er dient ja zur Lastverteilung über mehrere physikalische Maschinen.. und nutzt übrigens eine eigene Storage Engine, NDB.

Da kriegt man von MySQL sowas unter die Nase gehalten:
http://www.mysql.com/why-mysql/white-papers/mysql-wp_cluster-7.0_Cluster_MEMORY.php

"In performance testing, MySQL Cluster was able to deliver 30x higher throughput with 1/3rd the latency of the MEMORY storage engine on just a single node."
Tja, Hmm. Klingt ja ganz gut, kann ich mir aber in der Realität schwer vorstellen. Vielleicht mit mehr Threads. Auf jeden Fall ist klar, dass MySQL vor allem seine Cluster-Engine verkaufen möchte.

Nach wir vor ratlos,
coffeegirl.
 
Naja, verkaufen? MySQL Cluster ist ebenso kostenlos.

In performance testing, MySQL Cluster was able to deliver 30x higher throughput with 1/3rd the latency of the MEMORY storage engine on just a single node.

Vermutlich meinen sie, dass auf nur einem einzigen Server (der mindestens zweien mit Datenbank) die Performance besser war, allerdings trotzdem das komplette Setup zum Betrieb gebraucht wird ;)
 
Naja, verkaufen? MySQL Cluster ist ebenso kostenlos.

Für uns schon.
Man darf als professioneller Anwender aber auch zahlen:
http://mysql.com/products/

Vermutlich meinen sie, dass auf nur einem einzigen Server (der mindestens zweien mit Datenbank) die Performance besser war, allerdings trotzdem das komplette Setup zum Betrieb gebraucht wird ;)

Ich fürchte, Du hast den Haken gefunden :D

Naja, wie gesagt, außer den Werbewhitepapers habe ich bisher keine praktischen Erfahrungsberichte lesen können. Im Dokument steht auch eine Schritt-für-Schritt-Anleitung für den Ersatz einer Memory-Engine durch eine NDB. Das müsste doch mal jemand ausprobiert haben?

Naja, vielleicht findet sich ja noch jemand.

Gruß,
coffeegirl
 
Ich hatte mir das mal testweise mit VMs aufgebaut.. aber nicht weiter eingesetzt.
 
Back
Top