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