2016-07-30 14 views
3

Ich lese gerade dbms Buch und wie ich verstanden habe, wird Mvcc (Multiversion Concurrency Control) für hohe gleichzeitige Lese-und Schreibvorgänge verwendet. Kapitel "Nebenläufigkeitskontrolle auf Suchstrukturen" erwähnt jedoch verschiedene Schließkonzepte (Verriegelungskopplung, Verbindungstechnik usw.) für B-Bäume.MVCC & B-Tree & Concurrency

Wird Mvcc nicht auf interne und Blattknoten von B-Tree in dbms angewendet? Sind B-Tree Concurrency und MVCC verschiedene Dinge? Wenn ja, wie wird Mvvc in dbms implementiert?

Antwort

2

MVCC kann auf verschiedene Arten implementiert werden. Die einzige Voraussetzung ist, dass irgendwie ältere Zeilenversionen verfügbar sind.

Zum Beispiel speichert SQL Server sie in einer temporären Datenbank, die zurückgesetzt wird, wenn der Server neu gestartet wird.

Postgres speichert Zeilenversionen als versteckte Zeilen direkt im B-Baum. Es fügt dem Baum eine verborgene Schlüsselspalte hinzu. Beim Lesen vom Baum wird nur die Version angezeigt, die logisch gesehen werden sollte.

RavenDBs Voron verwaltet B-Tree-Seiten als unveränderbare Daten. Schriftsätze erzeugen völlig neue Bäume. MVCC wird daher als Lesen von dem korrekten unveränderlichen Baum implementiert.

Datenbanken sperren physische Strukturen selten für längere Zeit. Es ist keine gute Idee, den Datenbankclient zu aktivieren, um den Fortschritt für interne Datenbankstrukturen zu stoppen. Interne Strukturen sind normalerweise sehr kurz gesperrt. Logische Zeilensperren werden getrennt behandelt.

Wenn ich raten musste concurrency control on search structures bezieht sich auf physikalische Thread-Sicherheit. In der Regel ist MVCC nicht erforderlich, da mehrere Versionen nicht verwaltet werden müssen. Normale In-Memory-Sperren sind für kurze Zugriffe ausreichend.