2010-03-22 15 views

Antwort

5

Die Idee einer "Transaktion" im Softwaretransaktionsspeicher ist explizit aus Datenbanken entlehnt. Der Unterschied besteht darin, wo die Transaktionen implementiert sind und wie sie verwendet werden.

STM ist ein Konzept auf Sprachenebene: Eine Sequenz von Operationen wird erst wirksam, wenn eine Transaktion festgeschrieben wird. 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 durchgesetzt. Es gibt keinen inhärenten Begriff von 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 Sequenz von Datenoperationen wird erst wirksam, nachdem die Transaktion festgeschrieben wurde. Da es sich um eine Datenbank handelt, ist die Persistenz von grundlegender Bedeutung: Die Bedeutung des "Effekts" innerhalb einer Datenbank besteht darin, dass die Daten in einem persistenten Speicher gespeichert werden.

Sie könnten möglicherweise eine Datenbank und Datenbanktransaktionen verwenden, um einen STM-style-Algorithmus zu implementieren, aber Sie würden die Leichtigkeit und Bequemlichkeit (und wahrscheinlich in den meisten Fällen die Leistung) einer Implementierung auf Sprachebene verlieren.

+0

Was meinen Sie mit einer "Operation"? Meinst du den laufenden Code? – Zubair

+0

Ja, genau. In STM sind die Auswirkungen des Codes innerhalb der Transaktion (z. B. Zuweisungen an Variablen, E/A) nicht sichtbar, bis die Transaktion "festgeschrieben" ist. –

1

STM wird hauptsächlich für Parallelität verwendet, während Datenbanktransaktionen Datenkonsistenz haben.

+0

so stms sind nicht konsistent? – Zubair

+0

In Datenbanken gibt es explizite Invarianten, die angegeben und verwaltet werden können, hauptsächlich zum Beibehalten von Zuordnungen zwischen Schlüsselfeldern in Tabellen. Wenn ich die Tabellen "Kunde" und "Adresse" habe, kann ich angeben, dass jede Adresse einen übereinstimmenden Kunden haben muss, und die Datenbank behält dies bei. Haskell STM tut dies nicht. –

+1

@Paul meiner Meinung nach ist diese Art von Konsistenz nicht von Datenbanken ausgeschlossen. Sie können innerhalb einer STM-Transaktion immer eine Invariante erzwingen. –

4

Eine STM-Transaktion hat viel gemeinsam mit einer Datenbanktransaktion. Insbesondere für die für Datenbankdesigner wichtigen ACID-Eigenschaften bietet STM Atomicity and Isolation. Die Konsistenz ist jedoch Sache des Programmierers —, in dem Sie STM-Transaktionen schreiben können, die beispielsweise gegen die Invarianten interner Datenstrukturen verstoßen. Schließlich sind STM-Transaktionen normalerweise nicht haltbar. Die Ergebnisse werden im flüchtigen RAM gespeichert. Wenn der Computer nach einer erfolgreichen Transaktion abstürzt, können die Ergebnisse verloren gehen. Das ist meiner Meinung nach der wichtigste Unterschied zwischen einer STM-Transaktion und einer Datenbanktransaktion.

+0

Wenn Sie Ihre Invarianten im Typsystem codieren können, können Sie nicht inkonsistent schreiben. –