PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu InnoDB / MyISAM


ascer
06.03.2008, 13:36:32
Hallo Leute,

ich habe mich eben mal durch wikipedia gewälzt und auch Teile der MySQL-Dokumentation gelesen und das hat bei mir ein paar Fragen aufgeworfen...

bisher habe ich als Engine immer den MySQL-Standard, also MyISAM, verwendet.
jetzt steht aber in nächster Zeit ein etwas größeres Projekt an, wo z.B. eine
Shoutbox, ein Userprofil mit Gästebuch etc. realisiert werden sollen...

Wodrum es dabei geht ist folgendes: Bei diesem Portal werden später bis zu 1000 Leute angemeldet sein, natürlich werden niemals alle gleichzeitg das Protal verwenden, aber es könnte ja schon sehr gut sein, dass mal 10 Leute auf einmal die Shoutbox verwenden oder das 2 Leute sich gleichzeitig ein Profil anschauen oder ein Gästebuch von einem Profil etc...


Für die, die keine Zeit haben und nur die "kleine" Beschreibung lesen wollen, hier meine Fragen in kurzform:
- Ist InnoDB deutlich ( also merklich ) langsamer als MyISAM?
- Wird beim Schreib/Änder/Lösch/Lese-Vorgang unter MyISAM tatsächlich die ganze Tabelle gesperrt? ( und bei InnoDB eben nur der betroffene Datensatz, welcher angeblich aber trotz sperrung noch lesbar sein soll per select nur eben gegen änderung oder so gesperrt )
- keine Transaktionssicherheit bei MyISAM?! => können da Daten "aus versehen" im nirvana landen?? ( z.B. eben Passwörter von Usern, wenn die Zeitgleich ihr PW ändern? )



Für die, die etwas mehr Zeit haben die ausführlichen Beschreibungen/Fragen:

1. ich hab gelesen, bei MyISAM wird, wenn etwas geschrieben wird ( also z.B. ein INSERT in der Shoutbox stattfinden würde ) die komplette Tabelle gesperrt bis der Query fertig ist...stimmt das? bzw. wird die Tabelle in der Zeit auch für SELECT's gesperrt oder betrifft das nur das schreiben? und weiterhin habe ich gelesen, das bei InnoDB nur der betroffene Datensatz gesperrt wird, nicht aber die ganze Tabelle und das der betroffene Datensatz trotz Sperrung noch per SELECT gelesen werden kann, stimmt das? Sollte das so sein, würde ja zumindest für die Shoutbox schonmal kein MyISAM in Frage kommen...

2. Benutzerlogins / Passwörter werden natürlich auch in der DB gespeichert, jetzt hab ich bei Wiki aber gelesen, das MyISAM keinerlei Transaktionssicherheit unterstützt...in wie fern ist das denn beim Login relevant? Könnte das heissen, wenn z.B. 2 Leute ihr Passwort gleichzeitig ändern, das eines der beiden Passwörter "hops" geht, weil leider der eine 0,01 Sekunde schneller war, die DB dann grad komplett gesperrt ist und wegen keiner Transaktionssicherheit der andere Query einfach im nirgendwo verschwindet?

3. Wegen der Transaktionssicherheit soll InnoDB ja langsamer sein als MyISAM, ist ja auch verständlich, aber nirgends wird erwähnt wie viel langsamer denn z.B. ein Zugriff dadurch wird bzw. welche Zusatzoperationen durchgeführt werden...also meine Frage hierzu: wie viel langsamer ist es denn? wäre der Perfomanceunterschied bereits bei meinem Portal mit ca. 1000 Usern deutlich zu merken? Oder sprechen wird z.B. bei der Shoutbox bei sagen wir mal 10 Usern, die die gleichzeitig nutzen, nur von 0,02 Sekunden für nen SELECT bei MyISAM und 0,03 Sekunden beim SELECT für InnoDB? ( nur als Beispiel natürlich, meistens geht nen SELECT ja noch deutlich schneller bei CHAR-Feldern und die Shoutbox wird limitiert, das ein Eintrag nur aus ID, also dem INDEX, NAME -> CHAR(30) und MESSAGE -> CHAR(200) besteht...


gruß & danke für alle Antworten,
Ascer

Tumasch
10.03.2008, 12:49:13
Ich denke, dass bei so wenigen Besuchern die Engine keine wesentliche rolle spielt.

Ausserdem wäre eine DB ja wirklich schlecht, wenn sie einfach so werte verliert wenn 2 User gleichzeitig schreiben.

Meiner Meinung nach dauert ein SELECT, dass gleichzeitig mit einem UPDATE oder INSERT kommt, einfach ein Sekundenbruchteil länger. Daher denke ich dass du keinen grossen Unterschiede merken wirst.

Und das mit transaktionssicherheit betrifft eher den Fall wenn der Server abschmiert oder sql-befehle in transaktionen gepackt werden, wass bei kleinen PHP-Projekten eh seltenst der Fall ist (Wenn dir "START TRANSACTION" sowie "COMMIT" und "ROLLBACK" nichts sagen, dann vergiss es, du brauchst es dann nicht.)

ascer
10.03.2008, 15:44:37
ok, das ist doch mal eine Ansage^^
also kann man getrost bei MyISAM bleiben?!

Tumasch
11.03.2008, 10:44:13
Meiner Meinung nach ja.

du kannst ja auch mal versuchen alles auf InnoDB umzustellen und schauen was passiert. Ich prognostiziere keine feststellbaren Unterschiede.

defabricator
11.03.2008, 21:24:02
Du kannst die engine noch nachträglich austauschen. Für Deine PHP Skripte macht das keinen Unterschied.
Zum Thema Transaktionen:
http://de.wikipedia.org/wiki/ACID
http://de.wikipedia.org/wiki/Transaktion_%28Informatik%29
http://dev.mysql.com/doc/refman/5.1/en/transactional-statements.html

ascer
12.03.2008, 03:15:40
ok, danke!