Published on InterSystems Developer Community (https://community.intersystems.com)

ホーム > トランザクション中に任意のテーブル更新だけ先にCommitを確定させたい。

質問
Yuji Ohata · 2022年6月13日

トランザクション中に任意のテーブル更新だけ先にCommitを確定させたい。

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

現在テーブルを用いてシステムの設計を行っておりますが、
トランザクション中に、そのトランザクションの影響を受けずにテーブルを
更新するような仕組みが欲しいと考えております。
(トランザクションがRollbackされても、そのテーブルの更新だけは確定させたい。)

例えば$INCREMENT()はトランザクション中であっても、その制約を無視して値を更新できます。
そのような回避策がないかをご教示いただきたいです。

 

用途としては、連番を生成するAPIを作成していて、その値をテーブルで管理しています。
このAPIは複数プロセスから呼ばれることがありますが、
1トランザクション中の連続Updateにより、行ロックからテーブルロックへの昇格が行われる
(1000行以上行ロックをしたときのIRISの仕様)ことで、
他プロセスがAPIを利用できなくなるなどの影響が出ています。
今回のAPIに関しては、番号重複さえ起きなければよいので、そのような影響は受けたくありません。

極力グローバルは用いない設計としたいので、テーブルで対応したいです。
すいませんが、何か情報をお持ちの方はご回答いただけますと幸いです。

#InterSystems IRIS
Product version: IRIS 2022.1

ソースURL:https://jp.community.intersystems.com/post/%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E4%B8%AD%E3%81%AB%E4%BB%BB%E6%84%8F%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E6%9B%B4%E6%96%B0%E3%81%A0%E3%81%91%E5%85%88%E3%81%ABcommit%E3%82%92%E7%A2%BA%E5%AE%9A%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84%E3%80%82