問題タブ [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 投票する
2 に答える
1930 参照

sql - hsql を使用してフライウェイで DB トランザクション制御を変更する

TRANSACTION CONTROL を変更する HSQL では、アクティブなトランザクションは存在できません。次に Flyway は、移行 X をコミットした後、移行 X から SQL を実行する前に、autocommitt=false を設定し、独自のステートメントのいくつかを実行します。したがって、移行にSET DATABASE TRANSACTION CONTROLステートメントが含まれている場合、コミットされていないステートメントを永久に待機し、アプリケーションをハングさせます。

(補足: 移行前に flyway によって実行されるステートメントはバージョンごとに異なります。たとえば、1.7 では純粋な選択であったため、LOCK から MVCC に変更することは可能でしたが、MVCC を使用した後、その後の移行で後続の DDL ステートメントがハングしました。flyway 2.0 ではそうでした。 schema_version テーブルで select for update を実行したため、トランザクション制御の変更がハングアップしました。2.2 では、select for update が明示的なロックに変更され、2.0 と同じ効果がありました)

したがって、基本的にフライウェイ移行でトランザクション制御を変更することはできません。一方、フライウェイは移行以外の変更を思いとどまらせます。flyway/hsqlでトランザクション制御を変更する方法はありますか?

更新 もう 1 つの観察結果は、データベース制御が MVCC に設定されている場合、フライウェイ移行の DDL ステートメントでもアプリケーションがハングすることです。したがって、各移行の前に LOCKS を設定し、移行後に MVCC を復元します。フライウェイの観点からは、それはクリーンなソリューションでしょうか?

0 投票する
0 に答える
105 参照

symfony - Symfony2 によるマルチバージョン同時実行制御?

Symfony2 webapp にマルチバージョン同時実行制御を実装したいと考えています。

これは、どのイベントでもUPDATE、データベースに対して no が実行され、INSERTs のみが実行されることを意味します。この要件に対する Symfony2 によるネイティブ サポートが見つからなかったので、これを手動で実装する方法を考えました。

各エンティティ (例: a ) の通常の ID (主キー) にUser加えて、別のエンティティ プロパティ (例: another ) を追加しますuserID。したがって、ユーザー属性が変更されるたびに、ユーザーのINSERT別の行を単純に作成できます。その行には別IDの がありますが、同じuserIDです。

エンティティは、特定の追加エンティティ ID によって常に識別できます。

しかし、このソリューションにはいくつかの問題があります。通常のエンティティ ID は主キーであり、したがってこのエンティティへのすべての関係の識別子です。結合された主キー (例えばIDplus timestamp、またはIDplus entityID)を作成することもできますが、Symfony2/Doctrine2 は結合された主キーをサポートするように構築されていません

では、Symfony2/Doctrine2 で MVCC を実装するにはどのようにアプローチしますか? これを処理する方法はありますか?それとも、すべての変更を追跡する別の履歴テーブルを使用することをお勧めしますか?

0 投票する
0 に答える
530 参照

mysql - InnoDB MySQL でノンブロッキング読み取りを有効にする方法は?

InnoDBエンジンを備えたテーブル(tahminler、users)があり、InnoDBは行ロックを使用し、MVCC機能を備えていることを読みました。これら2つのことにより、同時書き込みクエリ(UPDATEまたはINSERT)がある場合でも、読み取りクエリ(SELECTクエリ)を実行できます)。

私の Web サイトには次のシナリオがあります。 1. user1 は、次のコードを使用して 2 つのテーブルに情報を挿入しています。

2. 同時に、別のユーザー user2 が前のテーブルの情報を要求しようとしています。

user2 がデータベースからいくつかの情報を読み取るように要求すると、テーブルのエンジンが InnoDB であっても、データベースは user1 が書き込みクエリを完了するまで読み取り要求をブロックします。

上記のコードを変更し、いくつかの行を追加して、次のように Transactions feauter を使用して問題を解決しました。

3 つの新しい行を追加して、トランザクション内で更新と挿入のクエリを実行し、他のテーブルとレコードの読み取りを可能にしますが、残念ながら、これらの行を追加した後でも読み取りブロックはそのままであるため、誰でもわかります不足しているクエリがある場合、またはここで間違いを犯した場合は私に連絡してください??

0 投票する
3 に答える
1328 参照

domain-driven-design - マルチバージョン同時実行制御と CQRS および DDD

オフライン クライアントをサポートするために、マルチバージョン同時実行制御を CQRS-DDD システムに適合させる方法を評価したいと考えています。

CouchDB から学んだことで、各エンティティにバージョン フィールドを提供したくなりました。ただし、ベクトル クロックのような他のバージョン同時実行アルゴリズムがあります。これにより、エンティティやイベントごとにこのバージョンの概念を公開するべきではないのではないかと思いました。

残念ながら、私が目にした実装のほとんどは、ソフトウェアが単一のサーバー上で実行され、イベントのタイムスタンプが 1 つの信頼できるソースから取得されるという前提に基づいています。ただし、一部のイベントがリモートおよびオフラインで生成される場合、ローカル クライアントのクロック オフセットに問題があります。その場合、通常のタイムスタンプは、イベントを順序付けするための信頼できるソースではないようです。

  1. これにより、タイムスタンプに基づいていない何らかの形式のMVCCソリューションを評価する必要がありますか?

  2. 遅延した一連のイベントを中央サーバーと同期するために、オフライン CQRS クライアントが評価する必要がある実装の詳細は何ですか?

  3. オープンソースの良い例はありますか?

  4. 私の DDD エンティティや CQRS クエリ DTO はバージョンパラメータを提供する必要がありますか?