※ ChatGPTを利用し、要約された質問です(原文:タイムスタンプを使用した同期処理)
タイムスタンプを使用した同期処理についての疑問
このQ&Aのポイント
データベースを使用したプログラムで、タイムスタンプを利用して同期処理を行いたいが、同一時刻にデータの更新が行われた場合や特定の処理において処理対象が変わる可能性があるか疑問がある。
質問内容は、同一時刻にデータの更新が行われた場合、タイムスタンプが同一になる可能性があるかどうか、また特定の処理において処理対象が変わる可能性があるかどうかというもの。
これらの疑問があるため、タイムスタンプを使用した同期処理について悩んでいる。同期処理のために追加のカラムを使用したくないため、解決策を探している。
データベース(DB2 UDB V4)を使ったプログラム(下記アプリA)を作成しています。
タイムスタンプ(下記カラムJ)のみを使用して同期処理を行いたいのですが、気になることがあります。
(作成した処理内容)
(1) アプリAでは、テーブルTのカラムIが1のレコードを全て取得し、テーブルTのカラムJを更新して処理Pを行う。
(2) (1)の処理P終了後引き続きアプリAにて、テーブルTのカラムIが1であり、かつカラムJが(1)で更新した時間と同じレコードのみを取得し、処理Qを行う。
(前提内容)
(3) (1)の処理が行われる前と、(1)と(2)の処理が行われている間には、別アプリBから別接続で、同一のテーブルTに対してデータの追加・更新が行われており、アプリBからテーブルTに対してカラムIが1のレコードが挿入されることがある。
またアプリBからのデータの追加・更新時にも常にカラムJの更新は行われる。
以上の場合に、
(実現したい内容)
アプリAでは、処理Pと処理Qでは、常に同一のデータに対して処理行いたい。
カラムJ以外に、同期処理のためのカラムは追加したくない。
(質問)
上記(1)と(3)で同一時刻にデータの更新または追加が行われた場合、タイムスタンプ(1マイクロ秒単位で記録)が全く同一になる「可能性」はあるのでしょうか?DB接続は別です。
そして、(1)では処理対象にならなかったデータが(2)では処理対象になる可能性はあるのでしょうか?例えば(1)でデータKのカラムJを更新したとき、同時に(3)でデータLのカラムJを更新しており、(1)ではデータKに対する処理のみが行われたが、(2)ではデータKに加え、(3)で更新したデータLも処理の対象となる場合です。もしあると同期処理に問題がありますよね。
微妙なところですが、悩んでいます。質問の意味がわからなかったら聞いてください。
よろしくお願いします。
補足
アプリAとBは無関係に処理しています。 あとAの中では個別にSQLを発行しています。 カーソルとかいうものを使えればいいのかもしれませんがよくわかりません。 トランザクションモードとやらも含めてもう少し勉強します。 どうもありがとうございます。