特にHaskellに関連して、ソフトウェアトランザクションメモリについて多くのことを読みましたが、データベーストランザクションとの違いを理解しようとしていますか? STM には理解できない利点がありますか?
3 に答える
ソフトウェアのトランザクショナル メモリにおける「トランザクション」の概念は、データベースから明示的に借用されています。違いは、トランザクションが実装される場所とその使用方法です。
STM は言語レベルの概念です。一連の操作は、トランザクションがコミットされるまで有効になりません。通常、これは、一部のグローバル/共有変数の値が、トランザクションが成功した場合にのみ変更されることを意味します。このプロパティは、言語ランタイムによって適用されます。持続性の固有の概念はありません。トランザクションに含まれる変数は、本質的に純粋に動的である可能性があります (たとえば、ワーク キューのサイズ)。
データベース トランザクションはアプリケーション レベルの概念です。一連のデータ操作は、トランザクションがコミットされるまで有効になりません。これはデータベースであるため、永続性は基本です。データベース内で「有効になる」という意味は、データが永続ストアに保存されることです。
データベースとデータベース トランザクションを使用して STM スタイルのアルゴリズムを実装することもできますが、言語レベルの実装の使いやすさと利便性 (そしておそらくほとんどの場合パフォーマンス) が失われます。
STM トランザクションには、データベース トランザクションと多くの共通点があります。特に、データベース設計者にとって重要な ACID プロパティのうち、STM は原子性と分離を提供します。ただし、一貫性はプログラマ次第です。たとえば、内部データ構造の不変条件に違反する STM トランザクションを記述できます。最後に、STM トランザクションは通常、Durable ではありません。結果は揮発性 RAM に保存され、トランザクションが成功した後にマシンがクラッシュすると、結果が失われる可能性があります。私の考えでは、これがおそらく STM トランザクションとデータベース トランザクションの最も顕著な違いです。
STM は主に並行性のために使用されますが、データベース トランザクションはデータの一貫性に関するものです。