【Magic xpa 連載最新号のご案内】 2025年3月10日
Magic xpa 開発者ユーザの皆様へ
【1】 Magic xpa 連載のご案内
------------------------------------------------
本日、Magic xpa の連載、「Magic xpa で作るイベントドリブン型プログラム」の第204回目「物理トランザクションのダーティリード」を連載コーナーにアップいたしました。
「物理トランザクションのダーティリード」というタイトルを見ると、いかにも専門用語的に響くのですが、実際は、しごく単純な意味合いをもつ機能のことを指しています。簡単にいうと、Aさんがデータを修正したあと、それをデータベースに保存する前の状態であっても、Bさんが別の端末から修正された内容を見ることができる機能のことを表します。
通常は、Aさんがデータを修正した後、データベースに上書き保存に行かない限り、Bさんからは修正内容を見ることができないのですが、物理トランザクションのダーティリードという機能を用いると、データベースに上書き保存する前の状態であっても、レコード後処理さえ通過していれば、他の端末からその内容を参照することができるようになります。
この機能は、その名のごとく「ダーティな状態(未確定の状態)の読み込み」という意味を表しますので、保存前の状態のデータであっても、それを見ることができるという機能になります。この機能は一見、中途半端なデータの参照で意味がないようにも思えますが、実際には一般の社会生活においてとても役に立つことがあります。
たとえば新幹線のみどりの窓口を連想してみてください。金曜日の夜の東京駅発下りの新幹線は、週末に地方に帰る人が多いせいか、慢性的に混み合っています。みどりの窓口に行くと、次の列車は満席であるか、あるいはあと1席しか空いていないといったようなケースによく直面します。
みどりの窓口は各所にありますので、残りの1席を求めて予約の取り合いになることがあるのですが、このとき、タッチの差でその席を「仮押さえ」した人に、その権利が譲り渡されます。ただし、席を押さえただけでは、このお客様はまだ支払いを済ませていませんので、トランザクションはコミットされていない状態です。とはいえ、システム的には最後の1席を押さえたことになりますので、そのタイミングで他の窓口では残席が「0」という表示になるわけです。
これが、一般的に言うところの「ダーティリード」の端的な例です。データベースに上書き保存する前の状態であっても、他の端末にその状況が刻々と反映されて表示されます。大量のデータを同時に扱うことの多い通販サイトや予約サイト等の場合、保存されたデータしか見られない状況だと、最新の状況を把握することができません。そんなときにこの機能を用いると、トランザクション中のデータも含めて、全体像が把握できるようになり、たいへん便利です。
では、その機能をMagicで実現するにはどうしたらよいのかを、順を追って見ていきたいと思います(以降、本編に続く)。

画面1 APGで作成した程度のプログラム
目次
1. 単純なラインモードタスクでの確認
2. 画面再表示のイベント設定
3. ロールバックのイベント設定
4. 複数レコードを一つのトランザクションに
5. AさんのPCから遅延タスクを実行
6. BさんのPCからも遅延タスクを実行
7. Aさんが3つのレコードを修正
8. Bさんが画面再表示ボタンを押す
9. 物理トランザクションの分離レベル
10. タスクを物理トランザクションに変更
11. 修正プログラムから再実行
12. Aさんが再び3つのレコードを修正
13. トランザクション中のデータが見えた
14. Bさんもトランザクションに入ってみる
15. 今度はAさんが画面再表示を押す
16. Aさんがロールバックボタンを押す
17. Bさんもロールバックしてみる
18. Aさんが画面再表示を押して再確認
次回は、「更新レコードの識別特性(最新版)」をお送りします。
購読期間中は現在掲載中の過去記事をすべて読むことができます。
皆様のお越しをお待ちいたしております。
サインインしてコメントを残してください。
コメント
0件のコメント