Ich habe viel über Software Transactional Memory gelesen, vor allem in Bezug auf Haskell, aber ich versuche, herauszufinden, wie es sich von Datenbanktransaktionen unterscheidet? Gibt es einige Vorteile, die ich bei STM nicht verstehe?
Antworten
Zu viele Anzeigen?Die Idee einer "Transaktion" im Software-Transaktionsspeicher ist ausdrücklich von Datenbanken entlehnt. Der Unterschied besteht darin, wo die Transaktionen implementiert sind und wie sie verwendet werden.
STM ist ein Konzept auf Sprachebene: Eine Folge von Operationen wird erst dann wirksam, wenn eine Transaktion abgeschlossen ist. In der Regel bedeutet dies, dass sich die Werte einiger globaler/gemeinsamer Variablen nur ändern, wenn eine Transaktion erfolgreich ist. Die Eigenschaft wird von der Sprachlaufzeit erzwungen. Es gibt keinen inhärenten Begriff der Persistenz: Die an einer Transaktion beteiligten Variablen können rein dynamischer Natur sein (z. B. die Größe einer Arbeitswarteschlange).
Datenbanktransaktionen sind ein Konzept auf Anwendungsebene: Eine Folge von Datenoperationen wird erst dann wirksam, wenn die Transaktion abgeschlossen ist. Da es sich um eine Datenbank handelt, ist die Persistenz von grundlegender Bedeutung: Die Bedeutung von "wirksam werden" innerhalb einer Datenbank ist, dass die Daten in einem persistenten Speicher gespeichert werden.
Sie könnten eine Datenbank und Datenbanktransaktionen verwenden, um einen STM-ähnlichen Algorithmus zu implementieren, aber Sie würden die Einfachheit und den Komfort (und wahrscheinlich in den meisten Fällen die Leistung) einer Implementierung auf Sprachebene verlieren.
Eine STM-Transaktion hat viele Gemeinsamkeiten mit einer Datenbanktransaktion . Von den ACID-Eigenschaften, die für Datenbankentwickler wichtig sind, bietet STM insbesondere Atomarität und Isolation. Die Konsistenz liegt jedoch in der Hand des Programmierers: Sie können STM-Transaktionen schreiben, die beispielsweise die Invarianten der internen Datenstrukturen verletzen. Schließlich sind STM-Transaktionen in der Regel nicht dauerhaft; die Ergebnisse werden im flüchtigen RAM gespeichert, und wenn der Rechner nach einer erfolgreichen Transaktion abstürzt, können die Ergebnisse verloren gehen. Das ist meiner Meinung nach wahrscheinlich der wichtigste Unterschied zwischen einer STM-Transaktion und einer Datenbanktransaktion.