0

結果整合性システムと従来の ACID システムを混在させるパターンはありますか?

ACID のようなトランザクションを必要とするメインフレーム上の一部 (少なくとも 2 つ) のレガシー システムにデータを保存したいと考えています。これらのメインフレーム データベース (OldWorld と呼びましょう) は、同じプロセス内の同じトランザクション マネージャーの下で実行されているため、メインフレーム システムの一貫性は問題ありません。

非メインフレーム環境 (これを NewWorld と呼びましょう) で mainframe-tm および ACID 対応のリレーショナル データベースを使用して XA-Transactions を処理できるトランザクション マネージャーがあります。しかし、私は XA-Transaction を使用したくありません。これは、メインフレーム側で実行時間の長いロックで問題が発生することが多く、多くの場合、両方の世界ですべての ACID 機能を必要としないためです。私は常に一貫したメインフレームを望んでいます (OldWorld のすべてのデータは OldWorld 内で一貫しています)。NewWorld System は、メインフレーム側からデータを読み取る際に、不整合データ (新旧の不一致) を処理できます。OldWorld にデータを格納するために使用される操作は簡単で、機能的に失敗しない「追加のみの操作」を節約できます (技術的に失敗する可能性がありますが、これは常に一時的な失敗である必要があります)。

4

1 に答える 1

0

分散トランザクションの必要性を回避するための私のアイデアは、OldWorldのデータを非同期で更新し、イベントソーシングデータレイヤー(NewWorlds内)を使用して、「soft」を使用してOldWorldで実行する必要がある情報を格納することです。 -transaction-idは、OldWorldへの二重送信を防止します。これらの「soft-transaction-id」は、OldWorldで実行する必要のあるトランザクションのデータをevent-sourcing-data-layerに保存するときに生成されます。

「soft-transaction-id」をOldWorld-Databasesに追加する変更はありませんが、「soft-transaction-id」の横に「Done」状態を格納できる新しいデータベースを追加して、 old-world-transactionsのこのデータベース部分の更新。次に、別の非同期プロセスがロックなしで状態情報を読み取り、NewWorldを更新できます(例:イベントソーシングストアからのデータでリレーショナルモデルを更新します。soft-transaction-idをdone(「global-consistent」)としてマークします。 )OldWorldの更新では、soft-transaction-idが常に最初にコミットされているかどうかが常にチェックされます。

自分の文章を読んでいると、ロックが少ないだけで、グローバルトランザクションのようなものだと感じます。OldWorldへの更新が機能的に成功するという知識は不可欠ですが、機能の競合を処理できる手動のマージプロセスは必要ありません。NewWorldシステムには、一貫性のないグローバル状態を処理する機能が必要です。これは、リレーショナルデータベースを読み取り、まだコミットされていない(OldWorld-Databaseに)イベントストアを分析することでOldSystemDataRequestsを模倣することで実行できます。他のすべてのトランザクションでは、ロック動作を備えた分散トランザクションを使用する必要があります。

于 2013-02-19T09:18:18.150 に答える