Konsistenz (Datenspeicherung)
Als Konsistenz bezeichnet man bei Datenbanken die Korrektheit der in der Datenbank gespeicherten Daten. Inkonsistente Datenbanken können zu schweren Fehlern führen, falls die darüberliegende Anwendungsschicht nicht damit rechnet. Man kann dabei zwei grundlegende Perspektiven auf Konsistenz von Daten unterscheiden, einerseits aus der Welt der "klassischen" relationalen Datenbanken und andererseits aus der Welt der verteilten Systeme.
1 Verteilte Systeme
1.1 Client-Centric Consistency
1.1.1 Monotonic Read Consistency
1.1.2 Monotonic Write Consistency
1.1.3 Read Your Writes Consistency
1.1.4 Write Follows Reads Consistency
1.2 Data-centric Consistency
1.2.1 Causal Consistency
1.2.2 Sequential Consistency
1.2.3 Linearizability
2 Konsistenz in klassischen relationalen Datenbanken
2.1 Konsistente Transformationen
Verteilte Systeme[Bearbeiten]
Verteilte Speichersysteme haben im Zuge des Cloud-Computing großen Auftrieb und Bekanntheit erlangt. In verteilten Speichersystemen werden Daten üblicherweise mehrfach über verschiedene Server verteilt repliziert, um einerseits die Verfügbarkeit der Daten zu erhöhen und andererseits die Zugriffszeiten zu verringern. Ersteres ist klar ersichtlich, da die Wahrscheinlichkeit, dass mehrere Server gleichzeitig ausfallen deutlich geringer ist, als dass lediglich einer ausfällt. Letzteres erklärt sich dadurch, dass Zugriffe wahlweise an geografisch nähere Replika geschickt werden können oder ein völlig überlasteter Server entlastet wird, indem ein Teil der Zugriffe von einem anderen Server übernommen wird. In diesem Kontext bedeutet Konsistenz, dass alle Replika eines Datums identisch sind. Insbesondere bedeutete dies auch, dass ein verteiltes Speichersystem für einen Datensatz A konsistent und gleichzeitig für einen Datensatz B inkonsistent sein kann. Man spricht auch von strikter Konsistenz, wenn alle Replika immer identisch sind.
Da es in verteilten Systemen nicht immer sinnvoll ist, alle Replika konsistent zu halten, gibt es hier auch sogenannte schwache Konsistenz (englisch weak consistency), d. h. es werden keinerlei Konsistenzgarantien abgegeben, und die sogenannte eventual consistency, die besagt, dass ein Datensatz irgendwann konsistent sein wird, sofern nur eine hinreichend lange Zeit ohne Schreibvorgänge und Fehler vorausgesetzt werden kann.
Im Spektrum zwischen "eventual" und strikter Konsistenz gibt es noch einige Zwischenstufen[1], dabei unterscheidet man zwischen sogenannter client-centric consistency und data-centric consistency. Ersteres beschreibt Konsistenzgarantien aus der Sicht des Clients, letzteres interne Konsistenzgarantien.
Client-Centric Consistency[Bearbeiten]
Monotonic Read Consistency[Bearbeiten]
Wenn ein verteiltes Speichersystem einmal auf eine Leseanfrage eines Clients für einen bestimmten Schlüssel mit Version N geantwortet hat, werden alle späteren Lesezugriffe dieses Clients nur noch Versionen, die mindestens so neu sind wie N, zurückliefern.
Monotonic Write Consistency[Bearbeiten<