www.wikidata.de-de.nina.az
In der Informatik ist das Phantomproblem inconsistent read ein Fehler der bei mehreren parallelen Datenbankzugriffen auftreten kann Werden wahrend einer Transaktion die sich auf mehrere Datensatze mit einer angegebenen Eigenschaft bezieht in einer gleichzeitig ablaufenden Transaktion neue Datensatze mit dieser Eigenschaft eingefugt kann dies inkonsistente Daten der ersten Transaktion zur Folge haben Inhaltsverzeichnis 1 Beispiele fur das Phantomproblem 2 Vermeidung 3 Fallstricke 4 Siehe auch 5 WeblinksBeispiele fur das Phantomproblem BearbeitenUber eine komplette Spalte soll eine Verknupfung berechnet werdenKonkret kann das beispielsweise die Bildung des Mittelwertes einer Spalte sein Transaktion 1 ermittelt zunachst die Summe uber die Spalte in der Tabelle danach fugt Transaktion 2 einen neuen Datensatz hinzu Als dritter Schritt berechnet Transaktion 1 die Anzahl der Datensatze uber die Spalten Am Ende wird die vorher ermittelte Summe aller Daten aus unserer Spalte durch die Anzahl der Datensatze geteilt Problem bei der Berechnung ist nur dass die Summe der gezahlten Datensatze hoher ist da mittendrin ein neuer Datensatz eingefugt wurde Dadurch wird der Mittelwert verfalscht Zeitpunkt Transaktion 1 Transaktion 21 SELECT SUM anzahl FROM lagerbestand Ergebnis Anzahl Waren im Lager insgesamt z B bei zwei unterschiedlichen Artikeln mit je einem Exemplar der Wert 2 2 INSERT INTO lagerbestand artikel anzahl VALUES Wikipedia Das Buch 3 3 SELECT COUNT FROM lagerbestand Ergebnis Anzahl unterschiedlicher Artikel im Lager Nach dem parallel laufenden INSERT ist der zuruckgegebene Wert 3 Wird das Ergebnis von vorhin durch diesen Wert geteilt um die durchschnittliche Anzahl von Exemplaren zu ermitteln wird nicht das korrekte Ergebnis 5 3 errechnet sondern ein zu niedriger Wert 2 3 Vermeidung BearbeitenAm einfachsten kann dieses Problem vermieden werden wenn bei einer fur das Phantomproblem anfalligen Transaktion die komplette Tabelle gesperrt wird Es genugt jedoch Modifikationen der betroffenen Spalte bei den betroffenen Datensatzen zu verhindern wenn gleichzeitig sichergestellt werden kann dass keine neuen Eintrage hinzugefugt werden konnen oder bestehende Eintrage entfernt werden konnen die ebenfalls spater in der Transaktion erfasst wurden Datenbanken kennen die der Isolationsebene serializable des SQL Standards entsprechende Moglichkeit der Serialisierung von parallelen Transaktionen Wird diese Isolationsebene eingesetzt mussen Anwendungen die auf die Datenbank zugreifen mit hierdurch entstehenden fehlgeschlagenen Zugriffen Serialisierungsfehlern umgehen konnen Fallstricke BearbeitenViele Datenbanken haben die Fahigkeit des wiederholbaren Lesens entsprechend der Isolationsebene repeatable read des SQL Standards Das bedeutet dass bei Anderung eines Datensatzes der Zeitpunkt der Anderung mit abgelegt wird Eine Transaktion die vor dieser Anderung begonnen hat sieht die Anderung dann nicht Dies bezieht sich jedoch oft nicht auf neu angelegte Datensatze sondern garantiert nur dass ein erneuter Lesevorgang auf bereits gelesene Daten innerhalb einer Transaktion dasselbe Ergebnis hat Siehe auch BearbeitenKonsistenz Datenspeicherung Verlorene Updates Schreib Lese Konflikt Nichtwiederholbares LesenWeblinks Bearbeiten Transaction Isolation aus der Dokumentation von PostgreSQL Transaction Isolation bei MySQL mit InnoDB Transaction Isolation bei Oracle DB Abgerufen von https de wikipedia org w index php title Phantomproblem amp oldid 189301729