Welche Algorithmen / Lesestoffe würden Sie zum Auflösen von Transaktionen / Lese- / Schreibsperren empfehlen?


10

Eine vereinfachte klassische Datenbanktransaktion kann wie folgt angesehen werden:

  • M Elemente lesen
  • Durchführen einiger Berechnungen basierend auf diesen Lesevorgängen
  • Schreiben einiger N-Ergebnisse basierend auf diesen Berechnungen, die die ursprünglich gelesenen Elemente enthalten können.

Bei der Ausführung dieser Transaktionen (gleichzeitig) müssen die ACID- Eigenschaften beibehalten werden.

Genau die gleichen Anforderungen (N Aktualisierungen basierend auf M Lesevorgängen auf Transaktionsebene) bestehen auch in anderen Nicht-DBMS-Systemen.

Ich bin daran interessiert herauszufinden, welche Algorithmen zum Ausführen / Auflösen dieser Transaktionen existieren und welche relativen Stärken und Schwächen diese Algorithmen haben. Könnten Sie etwas zum Lesen empfehlen? Dies können Bücher oder Online-Referenzen / Tutorials sein.

Klärung:

Ein naiver Algorithmus könnte beispielsweise sein, dass jede Transaktion eine einzelne globale Sperre durchführt, wodurch ein einzelnes Threading erzwungen und die Parallelität entfernt wird. Ein etwas komplizierterer Algorithmus wären Lese- / Schreibsperren für einzelne Elemente mit einer Reihenfolge, um einen Deadlock zu vermeiden. Usw. Gibt es eine gute Quelle, die verschiedene Algorithmen zur Lösung dieses Problems dokumentiert? Sogar eine Antwort, die nur auf einen einzigen Algorithmus mit seinen Stärken und Schwächen hinwies, wäre nützlich.


3
Diese Frage fällt sicherlich in den Geltungsbereich dieser Website. Ich würde empfehlen, etwas mehr über den Kontext zu schreiben, in dem Sie arbeiten. Derzeit ist es eher allgemein und offen.
Dave Clarke

Denken Sie, dass es sich lohnt, neu zu formulieren, damit es genau die Datenbankfrage ist? IE so etwas wie "Ich habe eine Datenbank, die gelesen und geschrieben werden kann, und ich möchte in der Lage sein, transaktional mit ACID-Eigenschaften zu lesen und zu schreiben. Welche Algorithmen existieren, um diese Eigenschaften sicherzustellen"
Nick Fortescue

Das Umformulieren der Frage kann zu Antworten führen, die näher an dem liegen, wonach Sie suchen, z. B. mehr Details zu dem Problem, das Sie lösen möchten. Zur Zeit geben Sie nur Hinweise. In jedem Fall klingt es so, als würden Sie nach klassischen Datenbank-Transaktionsalgorithmen fragen.
Dave Clarke

@ Dave - danke, ich habe bearbeitet. Besser?
Nick Fortescue

1
Kennen Sie bereits DBMS-Lehrbücher wie das von Ramakrishnan und Gehrke? Und wenn Sie nicht nach den Interna eines DBMS fragen, können Sie die Frage klären, um uns den Unterschied zwischen einem DBMS und dem, woran Sie interessiert sind, mitzuteilen?
Maverick Woo

Antworten:


10

Das Buch Transactional Information Systems von Weikum und Vossen deckt einen großen Teil des theoretischen und praktischen Bereichs aus verschiedenen Perspektiven ab, nicht nur aus Transaktionen. Es ist ungefähr 1000 Seiten lang und wird Sie ein oder zwei Wochen lang beschäftigen. Auf der anderen Seite ist es fast 10 Jahre alt, so dass möglicherweise etwas aktuelleres verfügbar ist. Andere Bücher in der Reihe umfassen Parallelitätskontrolle und -wiederherstellung in Datenbanksystemen von Bernstein, P., Hadzilacos, V. und Goodman, N., Addison-Wesley, 1987, Transaktionsverarbeitung: Konzepte und Techniken von Jim Gray und Andreas Reuter sowie Prinzipien der Transaktionsverarbeitungvon Philip A. Bernstein und Eric Newcomer, 2009. Letzteres habe ich nicht gesehen, aber als jüngstes könnte es ein guter Anfang sein, obwohl Ihre Lösung möglicherweise in älteren Texten zu finden ist. Ein Ausflug in die Bibliothek kann sich lohnen.

Ein monumentaler Text in diesem Bereich ist Atomic Transactions von Nancy Lynch et al. Es enthält einen formalen Bericht und Beweise für eine Reihe von Algorithmen, an denen Sie interessiert sind. Es ist eher formal und langwierig und entspricht möglicherweise nicht Ihrem Geschmack.

Viele neuere Arbeiten widmen sich dem Software-Transaktionsspeicher , der die Transaktionsideen auf Multithread-Anwendungen anwendet. Zu diesem Thema gibt es jedes Jahr Dutzende von Veröffentlichungen: Die Wikipedia-Seite bietet zahlreiche Referenzen.


1
Vielen Dank, Dave, vor allem für den Satz "Software Transactional Memory", ich war nicht auf diesen Namen
Nick Fortescue

1
STM ist heutzutage ein sehr heißes Thema in der Programmiersprachenforschung. Es ist ein Rennen um die Frage, ob STM- oder Actor-basierte Programmiermodelle die Grundlage für zukünftige gleichzeitige (= alle) Programmiersprachen sein werden.
Dave Clarke

1
Neben STM ist MVCC ein bestimmtes Schlüsselwort, nach dem in diesen Referenzen gesucht werden muss. Es wird in den meisten modernen DBMS verwendet: en.wikipedia.org/wiki/Multiversion_concurrency_control
Maverick Woo

@supercooldave Ich bin mir nicht sicher, ob es ein Rennen ist: Ich denke, zukünftige Sprachen müssen bis zu einem gewissen Grad ein bisschen von beidem unterstützen.
Marc Hamann

@ Marc Harmann: metaphorisch gesprochen.
Dave Clarke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.