<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Serialisierbarkeit</id>
	<title>Serialisierbarkeit - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Serialisierbarkeit"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Serialisierbarkeit&amp;action=history"/>
	<updated>2026-05-24T13:47:25Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Serialisierbarkeit&amp;diff=229744&amp;oldid=prev</id>
		<title>imported&gt;At40mha: Hilfe:Wikisyntax/Validierung#Ignoriertes Tag behoben</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Serialisierbarkeit&amp;diff=229744&amp;oldid=prev"/>
		<updated>2025-02-27T16:19:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Hilfe:Wikisyntax/Validierung&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Hilfe:Wikisyntax/Validierung (Seite nicht vorhanden)&quot;&gt;Hilfe:Wikisyntax/Validierung#Ignoriertes Tag&lt;/a&gt; behoben&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der Begriff &amp;#039;&amp;#039;Serialisierbarkeit&amp;#039;&amp;#039; stammt aus der Datenbanktheorie der Informatik. In [[Transaktionssystem]]en existiert ein Ausführungsplan für die parallele Ausführung mehrerer Transaktionen. Der Plan wird auch [[Historie (Transaktionsverarbeitung)|Historie]] genannt und gibt an, in welcher Reihenfolge die einzelnen Operationen der Transaktion ausgeführt werden. Als &amp;#039;&amp;#039;&amp;#039;serialisierbar&amp;#039;&amp;#039;&amp;#039; wird eine Historie bezeichnet, wenn sie zum selben Ergebnis führt wie eine nacheinander ([[seriell]]) ausgeführte Historie über dieselben [[Transaktion (Informatik)|Transaktionen]].&lt;br /&gt;
&lt;br /&gt;
Man unterscheidet &amp;#039;&amp;#039;&amp;#039;Konfliktserialisierbarkeit&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;Sichtenserialisierbarkeit&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;1-Serialisierbarkeit&amp;#039;&amp;#039;&amp;#039;. Steht der Begriff Serialisierbarkeit allein, wird er meistens als Konfliktserialisierbarkeit verstanden.&lt;br /&gt;
&lt;br /&gt;
== Anschauliches Beispiel ==&lt;br /&gt;
Um sich die wichtigsten Begriffe dieses Artikels anschaulich vorstellen zu können, soll folgendes Beispiel dienen:&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left:1.6em&amp;quot;&amp;gt;&lt;br /&gt;
In einer Bücherei wird ein Karteikarten-System zur Verwaltung des Bestandes an Büchern verwendet. Eine &amp;#039;&amp;#039;&amp;#039;Historie&amp;#039;&amp;#039;&amp;#039; bzw. eine &amp;#039;&amp;#039;&amp;#039;Ausführungsreihenfolge&amp;#039;&amp;#039;&amp;#039; könnte hier lauten:&lt;br /&gt;
# Hake den letzten Eintrag im Feld „ausgeliehen an“ auf der Karte „Moby Dick“ ab.&lt;br /&gt;
# Schreibe „Hans Meier“ in das Feld „ausgeliehen an“ auf der Karte „Moby Dick“.&lt;br /&gt;
# Streiche den letzten Eintrag im Feld „Rückgabe am“ auf der Karte „Moby Dick“.&lt;br /&gt;
# Schreibe „15. März 2003“ in das Feld „Rückgabe am“ auf der Karte „Moby Dick“.&lt;br /&gt;
Hier werden zwei Transaktionen gemischt ausgeführt. Transaktion A ist ein &amp;#039;&amp;#039;&amp;#039;Rückgabevorgang&amp;#039;&amp;#039;&amp;#039; und lautet:&lt;br /&gt;
&amp;lt;poem style=&amp;quot;margin-left: 1.6em;&amp;quot;&amp;gt;&lt;br /&gt;
A.1: Hake den letzten Eintrag im Feld „ausgeliehen an“ auf der Karte „Moby Dick“ ab.&lt;br /&gt;
A.2: Streiche den letzten Eintrag im Feld „Rückgabe am“ auf der Karte „Moby Dick“.&lt;br /&gt;
&amp;lt;/poem&amp;gt;&lt;br /&gt;
Transaktion B ist ein &amp;#039;&amp;#039;&amp;#039;Ausleihvorgang&amp;#039;&amp;#039;&amp;#039; und lautet:&lt;br /&gt;
&amp;lt;poem style=&amp;quot;margin-left: 1.6em;&amp;quot;&amp;gt;&lt;br /&gt;
B.1: Schreibe „Hans Meier“ in das Feld „ausgeliehen an“ auf der Karte „Moby Dick“.&lt;br /&gt;
B.2: Schreibe „15. März 2003“ in das Feld „Rückgabe am“ auf der Karte „Moby Dick“.&lt;br /&gt;
&amp;lt;/poem&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Operationen A.1 und B.1 sind konfliktär, ebenso wie die Operationen A.2 und B.2; würde man sie in vertauschter Reihenfolge ausführen, wäre das Ergebnis der Historie ein unverständliches Durcheinander. Eine Begründung lautet: Operationen A.1 und A.2 beziehen sich jeweils auf den letzten Eintrag. Welcher der letzte Eintrag ist, wird aber von den Operationen B.1 bzw. B.2 bestimmt. Wird also B.1 (B.2) vor A.1 (A.2) ausgeführt, wird ein neuer Eintrag für „Hans Meier“ hinzugefügt. Dieser Eintrag ist nun der Letzte in der Liste, entspricht aber nicht mehr dem letzten Ausleiher, sondern schon dem Neuen. Somit wird der falsche Eintrag abgehakt bzw. gestrichen.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mit Hilfe der Konfliktserialisierbarkeit können wir die Historie darauf hin überprüfen, ob diese konfliktären Operationen in der richtigen Reihenfolge ausgeführt werden. Die Sichtenserialisierbarkeit hingegen sagt uns, dass das Ergebnis der Historie dasselbe ist, wie wenn wir nur die letztendlich sichtbaren Operationen der Transaktionen in der richtigen Reihenfolge ausgeführt hätten.&lt;br /&gt;
&lt;br /&gt;
Die 1-Serialisierbarkeit stellt eine Erweiterung des Begriffs auf Mehrversionen-Historien dar. Die Verwendung einer Mehrversionen-Historie würde in diesem Beispiel bedeuten, dass bei jeder Änderung einer Bücherkarte eine neue Karte erstellt und gleichzeitig die alte Karte aufgehoben wird. Es werden dann Operationen möglich wie:&lt;br /&gt;
* „Lies das Feld „Autor“ der Karte „Moby Dick“ in der Kartenversion vom 17. März 1993“.&lt;br /&gt;
Alle Formen der Serialisierbarkeit garantieren, dass das Ergebnis einer Historie richtig ist.&lt;br /&gt;
&lt;br /&gt;
== Konfliktserialisierbarkeit ==&lt;br /&gt;
Zur Überprüfung der &amp;#039;&amp;#039;&amp;#039;Äquivalenz&amp;#039;&amp;#039;&amp;#039; der Historien wird hier die &amp;#039;&amp;#039;&amp;#039;[[Konfliktäquivalenz]]&amp;#039;&amp;#039;&amp;#039; herangezogen.&lt;br /&gt;
* Die Bedingungen der &amp;#039;&amp;#039;&amp;#039;Konfliktserialisierbarkeit&amp;#039;&amp;#039;&amp;#039; lauten in [[Mathematische Formel|Formeln]]:&amp;lt;br /&amp;gt; Sei H eine Historie, C(H) die Commit-abgeschlossene Projektion von H. H heißt genau dann konfliktserialisierbar, wenn:&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;\exists&amp;lt;/math&amp;gt; serielle Historie &amp;lt;math&amp;gt;H_{s}:C(H)\equiv H_{s}&amp;lt;/math&amp;gt;&lt;br /&gt;
* In Worten:&amp;lt;br /&amp;gt; Eine Historie H heißt genau dann konfliktserialisierbar, wenn es eine serielle Historie gibt, zu der die Commit-abgeschlossene Projektion von H konfliktäquivalent ist.&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;Commit-abgeschlossene Projektion&amp;#039;&amp;#039; einer Historie enthält nur noch diejenigen Transaktionen, die durch Commit abgeschlossen werden (also nicht abgebrochen werden). Diese Projektion wird im Artikel [[Historie (Transaktionsverarbeitung)|Historie]] näher erläutert.&lt;br /&gt;
&lt;br /&gt;
Konfliktserialisierbarkeit kann mit Hilfe eines [[Serialisierbarkeitsgraph]]en getestet werden: Ist der entstehende [[Azyklisch zusammenhängender Graph|Graph azyklisch]] (kreisfrei), so ist die getestete Historie serialisierbar.&lt;br /&gt;
&lt;br /&gt;
== Sichtenserialisierbarkeit ==&lt;br /&gt;
Hier wird zur Überprüfung der &amp;#039;&amp;#039;Äquivalenz&amp;#039;&amp;#039; die &amp;#039;&amp;#039;&amp;#039;[[Sichtenäquivalenz]]&amp;#039;&amp;#039;&amp;#039; verwendet. Die Bedingungen der &amp;#039;&amp;#039;&amp;#039;Sichtenserialisierbarkeit&amp;#039;&amp;#039;&amp;#039; lauten –&amp;amp;nbsp;analog zu oben&amp;amp;nbsp;– &lt;br /&gt;
* in Formeln:&amp;lt;br /&amp;gt; Sei H eine Historie, C(H) die Commit-abgeschlossene Projektion von H. H heißt genau dann sichtenserialisierbar, wenn:&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;\exists&amp;lt;/math&amp;gt; serielle Historie &amp;lt;math&amp;gt;H_{s}:C(H)\equiv_{V} H_{s}&amp;lt;/math&amp;gt;&lt;br /&gt;
* In Worten:&amp;lt;br /&amp;gt; Eine Historie H heißt genau dann sichtenserialisierbar, wenn es eine serielle Historie gibt, zu der die Commit-abgeschlossene Projektion von H sichtenäquivalent ist.&lt;br /&gt;
&lt;br /&gt;
Sichtenserialisierbarkeit kann mit Hilfe eines [[Polygraph (Informatik)|Polygraphen]] getestet werden: Ist der entstehende Graph azyklisch, so ist die getestete Historie sichtenserialisierbar.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang zwischen Konflikt- und Sichtenserialisierbarkeit ==&lt;br /&gt;
Die [[Menge (Mathematik)|Menge]] aller konfliktserialisierbaren Historien bildet eine echte [[Mengenlehre|Untermenge]] der Menge aller sichtenserialisierbaren Historien. Historien, die konfliktserialisierbar sind, sind demnach automatisch auch sichtenserialisierbar. Sichtenserialisierbarkeit ist theoretisch die effektivere Form der Serialisierbarkeit, denn sie ermöglicht mehr [[Nebenläufigkeit]] und damit bessere Leistungen als Konfliktserialisierbarkeit. Das Problem dabei ist, dass der Test auf Sichtenserialisierbarkeit mit einem Polygraphen [[NP-Vollständigkeit|NP-vollständig]] ist, also extrem lange dauert. Dadurch ist eine Ausnutzung der Sichtenserialisierbarkeit praktisch nicht möglich.&lt;br /&gt;
&lt;br /&gt;
== 1-Serialisierbarkeit ==&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;1-Serialisierbarkeit&amp;#039;&amp;#039;&amp;#039; ist eine Spezialisierung der Sichtenserialisierbarkeit auf Mehrversionen-Historien.&lt;br /&gt;
* In Formeln:&amp;lt;br /&amp;gt; Sei &amp;lt;math&amp;gt;H_{MV}&amp;lt;/math&amp;gt; eine Mehrversionen-Historie, &amp;lt;math&amp;gt;C(H_{MV})&amp;lt;/math&amp;gt; die Commit-abgeschlossene Projektion von &amp;lt;math&amp;gt;H_{MV}&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;H_{MV}&amp;lt;/math&amp;gt; heißt genau dann 1-serialisierbar, wenn:&amp;lt;br /&amp;gt; &amp;lt;math&amp;gt;\exists&amp;lt;/math&amp;gt; 1-serielle Mehrversionen-Historie &amp;lt;math&amp;gt;H_{1s,MV}:C(H_{MV})\equiv_{V} H_{1s,MV}&amp;lt;/math&amp;gt;&lt;br /&gt;
* In Worten:&amp;lt;br /&amp;gt; Eine Mehrversionen-Historie &amp;lt;math&amp;gt;H_{MV}&amp;lt;/math&amp;gt; heißt genau dann 1-serialisierbar, wenn es eine 1-serielle Mehrversionen-Historie gibt, zu der die Commit-abgeschlossene Projektion von &amp;lt;math&amp;gt;H_{MV}&amp;lt;/math&amp;gt; sichtenäquivalent ist.&lt;br /&gt;
&lt;br /&gt;
Prinzipiell ist die hierzu verwendete Äquivalenzrelation identisch mit der &amp;#039;&amp;#039;&amp;#039;[[Sichtenäquivalenz]]&amp;#039;&amp;#039;&amp;#039;, die besonderen Beschaffenheiten der Mehrversionen-Historien machen aber die Überprüfung der Gleichheit des [[Sichtenäquivalenz|letzten Schreibens]] hinfällig. Der Test, ob zwei Mehrversionen-Historien sichtenäquivalent sind, wird dadurch vereinfacht.&lt;br /&gt;
&lt;br /&gt;
1-Serialisierbarkeit kann mit Hilfe eines [[Mehrversionen-Serialisierbarkeitsgraph]]en getestet werden: Ist der entstehende Graph azyklisch, so ist die getestete Historie 1-serialisierbar.&lt;br /&gt;
&lt;br /&gt;
== Vergleich zwischen Sichten- und 1-Serialisierbarkeit ==&lt;br /&gt;
Ausschließlich gewöhnliche (Einversionen-)Historien können sichtenserialisierbar sein, während Mehrversionen-Historien ausschließlich 1-serialisierbar sein können. Die Grundbedeutung beider Begriffe ist – sieht man von der Form der Historie ab – identisch: „Wenn ich nur diejenigen Operationen ausführe, die das Ergebnis sichtbar beeinflussen, und das in der richtigen Reihenfolge, ist das Ergebnis korrekt“. Beide Eigenschaften bestätigen also die Korrektheit der überprüften Historie. Beide Eigenschaften werden in der Praxis kaum verwendet, da die Überprüfung über die zugehörigen Graphen extrem lange dauert.&lt;br /&gt;
&lt;br /&gt;
== Datenbank-Scheduler ==&lt;br /&gt;
Ein Datenbank-Scheduler dient der Verwaltung von Schreib- und Lesezugriffen (sogenannten [[Operation (Informatik)|Operationen]]) auf [[Datenbankobjekt]]en. Er sorgt dafür, dass keine Konflikte bei nebenläufigen [[Transaktion (Informatik)|Transaktionen]] auftreten. Transaktionen werden nach Möglichkeit parallel ausgeführt, um die Systemressourcen optimal ausnutzen zu können bzw. sie in kürzerer Zeit abzuschließen als wenn man sie nacheinander (seriell) ausführt. Dies kommt besonders bei Mehrbenutzerdatenbanken zum Tragen, da in solchen Systemen viele Datenbankzugriffe in sehr kurzer Zeit stattfinden können beispielsweise im zentralen [[Server]] einer Bank, der die Konten aller Filialen verwaltet.&lt;br /&gt;
&lt;br /&gt;
Mit anderen Worten, der Scheduler ist die Komponente eines [[Datenbank#Datenbankmanagementsystem|DBMS]], welche die Ablaufreihenfolge (auch Schedule oder [[Historie (Transaktionsverarbeitung)|Historie]] genannt) der Datenzugriffe auf der Datenbank ([[Operation (Informatik)|Datenbankoperation]]) so konstruiert, dass sie einem bestimmten [[Protokoll (Datenbank)|Protokoll]] gehorchen. Außerdem übernimmt ein Scheduler die Ablaufkontrolle. Dabei hat er die Möglichkeit eine [[Operation (Informatik)|Operation]] sofort auszuführen (d.&amp;amp;nbsp;h. an den [[Datenverwalter]] weitergeben), sie zu verzögern (meist realisiert über eine Warteschlange) um den Operationen andere Transaktionen den Vorzug zu geben oder sie zurückzuweisen (durch Abbruch / abort der zugehörigen Transaktion).&lt;br /&gt;
&lt;br /&gt;
Ein Scheduler muss folgende Eigenschaften eines Schedules sicherstellen:&lt;br /&gt;
&lt;br /&gt;
* Serialisierbarkeit&lt;br /&gt;
* Fehlersicherheit&lt;br /&gt;
&lt;br /&gt;
=== Serieller Schedule ===&lt;br /&gt;
In einem &amp;#039;&amp;#039;&amp;#039;seriellen&amp;#039;&amp;#039;&amp;#039; [[Prozess-Scheduler|Schedule]] werden die enthaltenen [[Transaktion (Informatik)|Transaktionen]] strikt nacheinander ausgeführt. Ein serieller Schedule ist damit immer korrekt, weil keine Überschneidungen der Transaktionen auftreten können. Allerdings ist ein serieller Schedule auch verhältnismäßig ineffizient, weil eine Transaktion immer die Beendigung der anderen Transaktion abwarten muss und damit keine Parallelisierung ausgenutzt werden kann.&lt;br /&gt;
&lt;br /&gt;
Ein Schedule wird als &amp;#039;&amp;#039;&amp;#039;serialisierbar&amp;#039;&amp;#039;&amp;#039; bezeichnet, wenn er äquivalent zu einem seriellen Schedule ist. Es gibt dabei folgende [[Äquivalenzklasse]]n:&lt;br /&gt;
&lt;br /&gt;
* [[Final-State-Serialisierbarkeit]]&amp;lt;br /&amp;gt; Schedules sind [[Finalstateäquivalenz|final-state-äquivalent]], wenn ihre Operationen ausgehend von einem gleichen Anfangszustand den gleichen Endzustand erzeugen. Dabei wird die globale Konsistenz nach Ausführung aller beteiligter Transaktionen betrachtet.&amp;lt;br /&amp;gt; FSR (final state serializability) ist die Klasse aller final-state-serialisierbaren Historien.&lt;br /&gt;
* [[Sichten-Serialisierbarkeit]]&amp;lt;br /&amp;gt; Schedules sind [[Sichtenäquivalenz|sichten-äquivalent]], wenn alle Transaktionen den gleichen Datenbank-Zustand &amp;#039;sehen&amp;#039;, d.&amp;amp;nbsp;h. wenn gilt: Transaktionen lesen gleiche Werte &amp;lt;math&amp;gt;\Rightarrow&amp;lt;/math&amp;gt; sie produzieren das gleiche Ergebnis. Es wird also sowohl die globale Konsistenz nach Ausführung aller beteiligten Transaktionen als auch die lokale Konsistenz nach Ausführung jeder einzelnen Transaktion betrachtet.&amp;lt;br /&amp;gt; VSR (view serializability) ist die Klasse aller sichten-serialisierbaren Historien.&lt;br /&gt;
* [[Konflikt-Serialisierbarkeit]]&amp;lt;br /&amp;gt; Schedules sind [[Konfliktäquivalenz|konflikt-äquivalent]], wenn unverträgliche Operationen in der gleichen Reihenfolge angeordnet sind.&amp;lt;br /&amp;gt; CSR (conflict serializability) ist die Klasse aller konflikt-serialisierbaren Historien.&lt;br /&gt;
* [[Commit-Serialisierbarkeit]]&amp;lt;br /&amp;gt; CMFSR (commit final state serializability) ist die Klasse aller commit-final-state-serialisierbaren Historien.&amp;lt;br /&amp;gt; CMVSR (commit view serializability) ist die Klasse aller commit-view-serialisierbaren Historien.&amp;lt;br /&amp;gt; CMCSR (commit conflict serializability) ist die Klasse aller commit-conflict-serialisierbaren Historien.Fehlersicherheit eines Schedules ist die Eigenschaft, dass dieser Schedule sich bei Abbruch einer oder mehreren Transaktionen genauso verhält wie ein ähnlicher Schedule, der ausschließlich die nicht abgebrochenen Transaktionen enthält.&lt;br /&gt;
&lt;br /&gt;
Es gibt folgende Klassen von Schedules bzgl. der Fehlersicherheit:&lt;br /&gt;
* RC – recoverable. Es ist möglich, nach einer abgebrochenen Transaktion die Verarbeitung der restlichen Schedules weiterzuführen ohne Inkonsistenzen zu erhalten.&amp;lt;!--&amp;lt;math&amp;gt;\mbox{Schedule } s \in RC \Leftrightarrow \forall t_i, t_j \in trans(s): \quad t_i \triangleright_s t_j \and c_i \in op(s) \Rightarrow c_j &amp;lt; c_i&amp;lt;/math&amp;gt;--&amp;gt;&lt;br /&gt;
* ACA – avoids cascading abort. Geschachtelte Abbrüche werden vermieden, indem Transaktionen nur von abgeschlossenen Transaktionen lesen dürfen.&amp;lt;!--&amp;lt;math&amp;gt;\mbox{Schedule } s \in ACA \Leftrightarrow \forall t_i, t_j \in trans(s): \quad t_i {\, \triangleright_s[x] \,} t_j \Rightarrow c_j &amp;lt; r_i(x)&amp;lt;/math&amp;gt;--&amp;gt;&lt;br /&gt;
* ST – strict schedules.&amp;lt;!--&amp;lt;math&amp;gt;\mbox{Schedule } s \in ST \Leftrightarrow \forall t_i, t_j \in trans(s), p_i(x) \in \{ r_i(x), w_i(x) \}: \quad w_j(x) &amp;lt; p_i(x) \Rightarrow a_j &amp;lt; p_i(x) \ \or \ c_j &amp;lt; p_i(x)&amp;lt;/math&amp;gt;--&amp;gt;&lt;br /&gt;
* RG – rigorous schedules.&amp;lt;!--&amp;lt;math&amp;gt;\mbox{Schedule } s \in RG \Leftrightarrow s \in ST \and \forall t_i, t_j \in trans(s): \quad r_j(x) &amp;lt; w_i(x) \Rightarrow a_j &amp;lt; w_i(x) \ \or \ c_j &amp;lt; w_i(x)&amp;lt;/math&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datenbanktheorie]]&lt;/div&gt;</summary>
		<author><name>imported&gt;At40mha</name></author>
	</entry>
</feed>