ENGLISH

Actian Zen v15 の新機能:データ更新の追跡が簡単に!

データのメンテナンスは、あらゆるデータベース環境で継続的に必要とされます。過去のデータのアーカイブ、オフラインアクセス後のデータの同期、変更されたデータの監査などは、一般的にカスタマイズされたプログラミングを必要とします。また、このようなカスタマイズされたプログラミングは、データベースの設計変更や時間のかかるプロセスを必要とします。Zen v15 では、既存のアプリケーションやデータ・レイアウトに影響を与えることなく、既存の Zen データファイルにこの作業を簡単に行える機能「システムデータv2」が追加されました。

システムデータは、これまでも Btrieve / Zen 製品に搭載されてきました。データファイル内のすべてのレコードに一意の識別子を提供します。システムデータは、トランザクションログと組み合わせて使用され、データの整合性とシステム障害時の復旧をサポートします。また、DataExchange(Windows サーバー間の Zen のデータレプリケーション製品)では、システム間でレプリケーションされるファイルのレコードを一意に識別するために使用されています。システムデータの値は、標準的な Btrieve Get(キー番号 125)で読み取ることにより取得できますが、システムデータは一意であるだけで、追加情報は提供されません。

Zen v15 で導入されたシステムデータv2 では、すべてのレコードに 2 つの一意の値が提供されます。これらの値は、レコードがファイルに作成された時刻と、最後に更新された時刻を示すタイムスタンプです。使用されているインターフェイスに関係なく、すべての作成と更新に対して Zen のエンジンが自動的にこの値を処理します。システムデータv2 は 13.0 ファイル形式が必要です。なお、13.0 以前のファイル形式をご利用の場合は、Rebuildツールを使って 13.0 に更新が可能です。

これまでのシステムデータと同様に、標準の Btrieve オペレーションのキー番号 125(作成時刻)および 124(更新時刻)でキーバッファーを読み込むと、値を取得できます。さらに、システムデータv2 の値は、sys$create および sys$update という仮想列名を使用して、任意の SQL インターフェイスからアクセスできます。列のデータ型は Timestamp(7) です。Timestamp(7) は、セプタ秒単位の標準的なタイムスタンプです。

Zen Control Center で実行される例を見てみましょう。

システムデータv2 を含むテーブルを作成するには、CREATE TABLE ステートメントに “SYSDATA_KEY_2” キーワードを追加します。

CREATE TABLE sensorData SYSDATA_KEY_2
(location varchar(20), temp real);

このキーワードは、既存のファイルを再構築する ALTER TABLE ステートメントで使用することで、(既存のテーブルに)この新しいシステムデータを含めることもできます。どちらの場合も、13.0 ファイル形式のファイルとなります。

それでは、いくつかの行を作成して、仮想列がどのようになるかを見てみましょう。

4 行を作成し、作成内容をさがします。

insert into sensorData values('Machine1', 77.3);
insert into sensorData values('Machine2', 79.8);
insert into sensorData values('Machine3', 65.4);
insert into sensorData values('Machine4', 90.0);

select "sys$create", "sys$update", sensorData.* from sensorData;

結果が表示されます。

sys$create                    sys$update                     location    temp
===========================   ===========================    ========    =====
2021-09-13 12:49:45.0000000   2021-09-13 12:49:45.0000000    Machine1    77.3
2021-09-13 12:49:45.0000001   2021-09-13 12:49:45.0000001    Machine2    79.8
2021-09-13 12:49:45.0000002   2021-09-13 12:39:45.0000002    Machine3    65.4
2021-09-13 12:49:45.0000003   2021-09-13 12:49:45.0000003    Machine4    90.0

レコードを作成した直後では、作成時刻と更新時刻に同じ値が記録されています。両方のシステムキーの値には、秒の小数部分が 7 桁で表示されていることに気づくでしょう。小数点以下の部分は、実際の作成時刻を表すのではなく、値の一意性を保証するために連番が使用されます。

行を更新した後は、sys$update の値だけが変更されていることがわかります。

行を更新します。

update sensorData set temp = 90.1 where location = 'Machine1';

更新された行を探します。

select "sys$create", "sys$update", sensorData.* from sensorData
             where sys$update > sys$create;

結果が表示されます。

sys$create                    sys$update                     location    temp
===========================   ===========================    ========    =====
2021-11-19 23:55:56.0000000   2021-11-22 02:54:26.0000000    Machine1    90.1

その他のクエリの例:

過去 20 分以内に作成または更新された行を検索します。

select "sys$create", "sys$update", sensorData.* from sensorData
             where "sys$update" > Timestampadd(SQL_TSI_MINUTE, -20, now());

最後の更新から経過した時間(分)を含め、変更されたすべての行を返します。

select sensorData.*, Timestampdiff(SQL_TSI_MINUTE, "sys$update",
             now()) NumMins from sensorData where "sys$update" > "sys$create";

過去 24 時間に作成された行数を返します。

select count(*) as Last24Count from sensorData
            where Timestampdiff(SQL_TSI_hour, "sys$create", now()) < 24;

Actian Zen の SQL エンジンは、システムデータv2 のインデックスをクエリの最適化に利用可能です。したがって、システムデータ仮想列に制限または並べ替えがあるクエリでは、必要に応じてこのインデックスが使用されます。

Zen v15 とシステムデータv2 を使用して、作成時刻と最終の更新時刻を簡単に追跡できるようになりました。是非、Zen v15 の評価版をダウンロードし、最新の機能をお試しください!

– Actian Zen v15 評価版のお申し込み
https://www.agtech.co.jp/actian/download/#a03

https://www.actian.com/company/blog/techniques-for-time-series-and-event-driven-data-management-tracking-data-changes-with-zen/

(September 22, 2021 Linda Anderson 著)

Linda Andersonについて

Linda Anderson 氏は、Actian Zen 製品のサステイニング・エンジニアリング・マネージャー(Sustaining Engineering Manager)として、現行製品ラインのアップデートと改善を行うチームを担当しています。Actian Zen、PSQL、Btrieve の開発者およびユーザーと 25 年以上にわたり、携わってきました。

一覧に戻る

Contactお問い合わせ

お気軽にお問い合わせください。

お問い合わせ

    必須会社名

    個人のお客様は「個人」と入力してください。

    必須お名前
    必須メールアドレス
    必須メールアドレス(確認)
    必須ライセンス ありなし
    ダウンロード目的