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
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