問題タブ [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.
database - コミットされていないmvccデータベースを読み取る
読み取りコミットモード(postgres)で次のトランザクションを実行したいとします。
操作がこの順序で呼び出された場合:
T2はr(A)で待機する必要があると思います。T1は、後で書き込みたいため、最初の読み取り時にAの排他ロックを設定するためです。しかし、MVCCには読み取りロックはありませんか?
今私は2つの質問があります:
JDBCを使用してデータを読み取り、読み取ったデータを挿入するためにseparteコマンドを実行した場合。データベースは、読み取りのみのときに排他ロックを作成する必要があることをどのように認識しますか?私の知る限り、2PLでは読み取りロックを書き込みロックに増やすことは許可されていません。
私の仮定は間違っていると思います...このシナリオはどこで待機しますか、それとも1つのトランザクションが強制終了されますか?コミットされていない読み取りは、失われた更新を許可するべきではありませんが、これがどのように機能するかはわかりません。
誰かが私を助けてくれたら嬉しいです。ありがとう
database - 過去のシステムの状態に関するクエリを実行できるデータ ストレージ システムは?
「特定の時間に、特定の条件に一致するすべてのレコードの合計はどれくらいだったか」のような質問が重要なシステムを設計しています。
多値同時実行制御 (MVCC) は、監査証跡を永久に保持するため、ここでの方法のようです。
ただし、他のデータベース機能からまとめて処理するのではなく、データ ストレージがこれを処理できるとよいでしょう。現在、Oracle と CouchDB の他のデータベース エンジンは MVCC を使用していますが、舞台裏でのみ使用されています。これを使用して、競合を解決したり、実行時間の長いクエリで最近更新されたデータに遭遇したときに何をすべきかを決定したりします。しかし、「2009 年 1 月 20 日 17:00 のシステム状態で、このクエリは何を返すか」と明示的に言うことができるシステムは知りません。では、そのようなシステムはありますか? 理想的には、オープンソース?
oracle - オラクルのアンドゥセグメントバインディングに関する質問
私はDBAではありません。Oracleのマルチバージョン同時実行モデルについて知りたいだけです。
DML操作を開始するとき、MVCCプロトコルの最初のステップはUNDOセグメントをバインドすることです。問題は、なぜ1つのUNDOセグメントが1つのアクティブなトランザクションにしか対応できないのかということです。
お時間をいただきありがとうございます~~
postgresql - データベース コンテンツのバージョン管理
データベースのいくつかのテーブルで発生したすべての変更の実行中の履歴を保持することに関心があるため、分析目的でデータベースの履歴状態を再構築できます。
私は Postgres を使用していますが、この MVCC はこの目的のために悪用できるはずですが、これをサポートするドキュメントが見つかりません。私はそれを行うことができますか?より良い方法はありますか?
どんな入力でも大歓迎です!
UPD
Denis の回答を回答としてマークしました。なぜなら、彼は MVCC が私が求めているものであるかどうかという質問に実際に答えたからです。ただし、誰かが役に立つと思った場合に備えて、私が決めた戦略を以下に詳しく説明します。
私が望むことを行う Postgres 機能: オンライン バックアップ/ポイント イン タイム リカバリ。
http://www.postgresql.org/docs/8.1/static/backup-online.htmlでこの機能の使用方法が説明されていますが、基本的には、この「先行書き込みログ」をアーカイブ モードに設定して、データベースのスナップショットを作成できます (たとえば、 、ライブになる前に)、WAL を継続的にアーカイブします。その後、ログ再生を使用していつでもデータベースの状態を呼び出すことができます。また、必要に応じてウォーム スタンバイを使用するという副次的な利点もあります (スタンバイ サーバーで新しい WAL を継続的に再生することにより)。
おそらく、この方法は履歴を保持する他の方法ほど洗練されていません。クエリを実行するすべての時点で実際にデータベースを構築する必要があるためです。ただし、セットアップは非常に簡単で、情報を失うことはありません。つまり、履歴データの処理を改善する時間があれば、すべてが揃っているので、私の不格好なシステムをより洗練されたシステムに変えることができます。
これを完璧にする重要な事実の 1 つは、特定のアプリケーションの「有効時間」が「トランザクション時間」と同じであることです。そうでない場合は、「トランザクション時間」のみをキャプチャします。
WAL について知る前は、毎日のスナップショットか何かを取得することを検討していましたが、大きなサイズの要件と関連するデータ損失が私には合いませんでした。
最初からデータの保持を損なうことなく、すぐに起動して実行する方法として、これは完璧なソリューションのように思えます.
postgresql - PostgreSQL で行の古いバージョンを明らかにする方法は?
Postgres は MVCC を使用し、古いバージョンの行をディスクに保存することを知っています。具体的な行の破棄された古いバージョンに (読み取り専用で) アクセスしたいと思います。どうすればいいですか?
performance - PostgreSQL Vacuumを1〜2分に1回実行できますか?
私は次のプロジェクトのためにさまざまなMVCC対応データベースを検討しており、PostgreSQLが私のレーダーに登場しました。
私のプログラムの要件には、おおよそ次のようなシーケンスが含まれます。
データベースの現在のバージョンからいくつかの情報を読み取り、データの80〜90%を変更して、1つ以上のトランザクションに書き戻します(グリッドの新旧両方の状態が存在するConwayのGame of Lifeでグリッドを更新するようなものを想像してください)が必要です)。
コミット後1〜2分待ちます。この間、クライアントは新しいデータに対して読み取りを発行できます。
繰り返す。
データベースは2〜4GBのようなものに制限されます。
変更の約90%は既存のオブジェクトの更新であり、約5%は新しいオブジェクトであり、約5%は削除されたオブジェクトです。
だから私の質問は、ステップ1.5としてプレーンなVACUUMコマンドを1〜2分ごとに1回実行し、PostgreSQLが毎回2〜3GB以上の変更に対応できるようにすることができるかということです。
mysql - 読み取りからのMysqlInnoDB行のロック
私はmysqlのドキュメントを読みましたが、すべてを理解していない可能性があります。私が探しているのは、他のセッションの読み取りからの行のロックです。行がロックされている間、他のセッションはロックが解除されるまで待機します。他のセッションにスナップショットから読み取らせたくありません!彼らはリリースが行われるまで待たなければなりません!
私が取得したいのは、次の例とまったく同じですが、テーブル全体のロックではなく単一の行の場合です。
前もって感謝します!
couchdb - CouchDB / Cloudant に保持されるドキュメント リビジョンの数と期間は?
CouchDB と Cloudant では、ドキュメントが変更されると、データベースは以前のバージョンを保持します。何をどのくらいの期間保持しますか?