コンテンツにスキップ

8.1 概要と選択基準

機器の測定値は継続的に蓄積されますが、点検状態や在庫数量は既存値を変更する必要があります。 両方を同じモデルで処理すると、元データの保持と状態変更の要件が混在しがちです。 変更可能な業務データをTRANSACTIONに、元の時系列データをTAG・LOGに格納する構成を先に検討してください。

TRANSACTIONテーブルの特性

TRANSACTIONはSELECT・INSERT・UPDATE・DELETE、PRIMARY KEY、UNIQUE INDEX、セカンダリインデックスをサポートします。 Standard Edition専用で、次の3つの構文は同じテーブルを作成します。

構文意味
CREATE TABLEタイプを省略したデフォルトのTRANSACTION作成
CREATE TRANSACTION TABLEタイプを明示した作成
CREATE TXN TABLE短縮形による作成

公開文書と運用スクリプトでは、タイプが明確なCREATE TRANSACTION TABLEを推奨します。 CREATE RDB TABLE・CREATE TRX TABLEはサポートしていません。 Clusterでは上の3つの作成構文をすべて使用できません。LOGはCREATE LOG TABLEで明示します。

状態変更とロールバック

CREATE TRANSACTION TABLE ch8_overview (
    item_id LONG PRIMARY KEY,
    qty     INTEGER NOT NULL
);
INSERT INTO ch8_overview VALUES (42, 10);

BEGIN;
UPDATE ch8_overview SET qty = qty - 3 WHERE item_id = 42 AND qty >= 3;
SELECT item_id, qty FROM ch8_overview;
ROLLBACK;

SELECT item_id, qty FROM ch8_overview;
DROP TABLE ch8_overview;

同じ接続では、トランザクション内の検索は数量7、ROLLBACK後の検索は10を返します。 qty >= 3は、在庫不足の場合に変更しないための業務条件です。

UPDATEがエラーなしで終了すれば業務も成功した、と判断しないよう注意してください。 条件に一致する行がなければ、変更件数は0になり得ます。 アプリケーションでは影響行数が想定した1であることを確認し、次の処理かロールバックかを決める必要があります。 SQL例の数値を置き換えることより、この確認手順が重要です。

他のテーブルとの比較

主な要件最初に検討するテーブル
センサー名ごとの測定値とROLLUPTAG
更新しないログ・イベントの元データLOG
小規模な現在のマスターデータLOOKUP
リレーショナルなDMLと明示的トランザクションTRANSACTION
再起動後に消失してもよいメモリ上の状態VOLATILE

TRANSACTIONには、機器の点検状態、業務履歴、別途作成した要約結果などを格納できます。 大量の元データの収集では、TAG・LOGとスループット・取り込み方法を比較してください。 TRANSACTIONもAppendをサポートしますが、TAG・LOGと同じスループットやバッチ境界を前提にしないでください。 取り込み方式で具体的に区別します。

LOOKUPは、TRANSACTIONの全機能を代替するテーブルではありません。 Clusterでリレーショナルトランザクションが必須の場合は、別のRDBMSを含む構成を検討する必要があります。

設計基準

1行を識別するキーと、重複を防ぐ業務キーを区別してください。 内部番号にはPRIMARY KEY、外部システムのコードなど別の一意値にはUNIQUE INDEXが必要な場合があります。 自動採番を使用しても、業務キーの重複は自動的には防げません。

続いて、頻繁に実行するWHERE条件と業務の成功基準を決めます。 トランザクションの終了位置とエラー時の確認事項まで決めておくと、同時要求や接続障害が発生しても対応を一貫させられます。 スキーマトランザクションを併せて確認してください。

最終更新日