問題タブ [mvcc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
17 参照

database - JavaScriptでデータベースMVCCに関する「マルチバージョニング」をシミュレートする方法は?

これは、トランザクションの「ロック」がないことによる問題を示すデモです。setTimeout を使用して非同期/同時実行をシミュレートします。C、Go、Rust などの言語で並行性を扱ったことがないため、実装の詳細でどのように機能するかはよくわかりませんが、MVCCの概念を理解しようとしています。

記録する

トランザクションがレコードを処理している途中で、同時に読み取ることができる実レコードを変更します。ロックはありませんが、MVCC はロックなしで (複数のバージョンのレコードを使用して) 実行します。次に、MVCC がどのように機能すると思うかを実装しようとします。私の理解を正していただけることを願っています。これがそれです。

それはこれを出力しますが、これは正しいようです。

これは正しいですか、一般的にどのように機能しますか? 主に、実際の実装ではレコードごとにいくつのバージョンが作成されますか? 一度に 2 つ以上のバージョンを作成できますか? もしそうなら、それは一般的にどのような状況で起こりますか? タイムスタンプはどのように機能しますか? ウィキページのタイムスタンプについて読みましたが、実装方法が実際には登録されていません。また、増加するトランザクション ID。つまり、基本的にこれら 3 つの部分 (バージョン管理、タイムスタンプ、およびトランザクション ID) がどのように組み合わされるかです。

JavaScript でのタイムスタンプとバージョン管理のある種のシミュレーションを探しているので、実装レベルの大まかな概算のようなものでありながら、一般的な概念を高いレベルで理解していることを確認できます。MVCC とは何かを知り、いくつかの論文を読むだけでは、MVCC の実装方法を知るには十分ではありません。

私の例では、トランザクション中に2 つのバージョンのレコードしか存在しません。それ以上必要な場合があるかどうかはわかりません。また、タイムスタンプを挿入する方法がわかりません。