Shadow Paging
# Shadow Paging

Als Shadow Paging wird in der Informatik ein Verfahren bezeichnet, um in Datenbanksystemen die beiden ACID-Eigenschaften Atomarität und Dauerhaftigkeit zu unterstützen.

Eine Seite (Page) bezeichnet in diesem Kontext eine Einheit physischen Speicher (beispielsweise auf einer Festplatte), üblicherweise in der Größenordnung $2^{10}$ bis $2^{16}$ Bytes.

Shadow Paging ist ein Copy-On-Write-Verfahren, um in-place Updates auf Seiten zu vermeiden. Stattdessen wird, wenn eine Seite modifiziert werden soll, eine Shadow-Page allokiert. Da auf die Shadow-Page keine Referenzen (anderer Seiten) zeigen, kann sie beliebig modifiziert werden, ohne Konsistenzbedingungen zu verletzen etc. Wenn eine Seite dauerhaft (persistent) werden soll, werden alle Seiten, die sich auf das Original bezogen, aktualisiert, sodass sie sich stattdessen auf die neue Seite beziehen. Da die Seite nur "aktiviert" wird, wenn sie bereit ist, verläuft der Vorgang atomar.

Wenn die bezugnehmenden Seiten auch mittels Shadow Paging aktualisiert werden müssen, kann sich dieser Vorgang rekursiv wiederholen, was hohe Kosten verursachen kann. Beim WAFL-Dateisystem kommt die Write Anywhere Lösung zum Einsatz, welche die Seiten nur soweit persistent macht, wie gerade nötig ist (d. h. write-behind caching). Dies erhöht die Leistung maßgeblich, da viele Schreibvorgänge auf Hotspots hoch oben in der referenziellen Hierarchie vermieden werden (z. B. dem Superblock eines Dateisystems). Der Preis ist eine hohe Verzögerungszeit beim Commit.

Write ahead logging ist eine beliebtere Lösung, welche in-place Updates verwendet.

Shadow Paging ähnelt der old master-new master Stapelverarbeitung, die bei Datenbanken auf Großrechnern verwendet wird. Bei diesen Systemen wurde das Ergebnis jeder Stapelverarbeitung (u. U. ein Tag Arbeit) auf zwei separate Festplatten (oder andere Datenspeicher) geschrieben. Eine wurde zur Datensicherung aufbewahrt, die andere wurde als Ausgangspunkt für die nächste Stapelverarbeitung verwendet.

Shadow Paging ähnelt rein funktionalen Datenstrukturen auch insofern, als in-place Updates vermieden werden.

