matzewe01 wrote:oschad wrote:
Das lese ich jetzt erst: Wieso FS-Snapshot? PostgreSQL sichert man mit einem Dump und gut is, denn die Daten bleiben eingefroren aus der Sicht des zugreifenden Benutzers innerhalb einer Transaktion. D.h. es ist egal, wenn da jemand herumschreibt in der DB, während man sichert, PostgreSQL versteckt das vor dem zugreifenden Benutzer und somit kriegt man einen konsistenten Dump.
Erklär das doch mal genauer und auch den Umstand, warum im Unterschied zu Mysql, die Daten konsistenter sind als bei mysql und Transaktionen auf Basis der Innodb.
Ok, also bei jeglichen Zugriffen auf die PostgreSQL-DB, bekommt der Benutzer eine eingefrorene DB zu Gesicht, d.h. es gibt mehrere Sichten gleichzeitig auf die DB, nämlich die des zugreifenden Benutzers, für ihn ändert sich die DB während seines Zugriffs nicht, obwohl das natürlich tatsächlich durch konkurrierende Zugriffe passieren kann. Ein Zugriff ist ein einzelner SQL-Ausdruck oder aber eine Transaktion. Ich hab oben beides unter Transaktion zusammengefasst.
D.h. macht ein Benutzer ein lange dauerndes Lesen auf der DB und schreibt ein zweiter Benutzer während des Lesens in die zu lesenden Daten rein, dann sieht das Benutzer 1 nicht, er sieht die DB immer noch so, als wäre sie nicht verändert worden. Erst nach Ablauf seiner Anweisung bzw. nach Ablauf der Transaktion von Benutzer 1, sieht er die Änderung.
Das bedeutet bei konkurrierendem Zugriff auf die gleichen DB, der eine liest, der andere schreibt gleichzeitig die gleichen Daten, kann man die Daten nicht inkonsistent machen für den lesenden Zugriff.
Das führt dazu, dass man natürlich auch einen konsistenten Dump machen kann, was ja nichts anderes ist als alle DBs lesen, denn schreibende Zugriffe anderer Benutzer während des Dumps werden im Dump nicht sichtbar sein, somit sind die Daten auf DB-Ebene konsistent.
Genau dieses Verhalten hast du bei MySQL nicht, konkurrierende Zugriffe werden sichtbar. Wenn man es also genau nimmt, kann man mit MySQL gar nicht garantiert konsistent Daten lesen, da andere konkurrierende schreibende Zugriffe die Konsistenz zerstören können. Als Alternative kann man noch immer einen Lock setzen, bevor man was liest, aber das ist ja in der realen Welt gar nicht darstellbar so etwas, denn dann darf jede Applikation so oft versuchen zuzugreifen, bis man mal in einen freien Zeitschlitz fällt, bei sehr vielen Zugriffen oder abspackenden Applikationen ist das nicht wirklich lustig.
Mmh, also ich weiß nicht, ich finde MySQL an der Stelle einfach nicht gut.
mfg
Oli