スマートスタイル TECH BLOG

MariaDB Server テンポラル・テーブル

本記事はMariaDB Corporationより寄稿された記事となります

はじめに

2018年5月にGAとなった MariaDB Server 10.3 では,すべてのデータ作成/更新/削除履歴を記録可能なテンポラル・テーブル(System-Versioned Tables)が新機能として追加されました。
テンポラル・テーブルにより以下のオペレーションが可能となり,より高度なセキュリティ,データ復旧性などが得られます。

  • すべてのデータ変更の監査
  • 過去の任意時点でのデータのリカバリ
  • 偶発的なデータ変更/削除や人為的エラー,アプリケーション エラーからの復旧

今回は簡単なサンプルデータを用いてテンポラルテーブルを解説したいと思います。

テスト環境

  • MariaDB Server 10.3.12
  • CentOS 7.6.1810

サンプルテーブル作成

従業員リストのようなテーブルを作成し,Linuxのdateコマンドでシステム時間を変更しながらサンプルデータをINSERTします。

テンポラルテーブルを用いるには,上記のように,WITH SYSTEM VERSIONING を付与します。なお,CREATE TABLEだけでなく,ALTER TABLE でも利用可能です。

サンプルデータINSERT

以下の日付でサンプルデータをINSERTします。システムの日時は,例えば2017-01-01 9:00の場合は,以下のコマンドで変更することが可能です。(chronyd は disable としています)。

2017-01-01:
Johnが入社

2017-03-01:
Mariaが入社

2018-06-01:
Bobが入社

2018-06-30:
John(id=1)が退職

2018-12-24:
Eveが入社

2018-12-31:
Bob(id=3)が退職

2019-01-01:
Tomが入社

サンプルクエリ

全レコードのSELECT

全履歴を参照するには,FOR SYSTEM_TIME ALL を付与してSELECTを実行します。

System Versioned Table では,row_start と row_end が隠しカラムとして追加され,各レコードがいつからいつまで存在していたか記録されます。

2017-01-01時点での全社員リスト

任意時点でのレコードを抽出するには,FOR SYSTEM_TIME AS OF TIMESTAMP '日時'をSELECTに付与します。

2018-01-01時点での全社員リスト

2018-06-30時点での全社員リスト

John が 2018-06-30 17:00 で退職しますが,10:00の時点では社員数が3となります。

2018-12-31時点での全社員リスト

John が退職済で,2018-12-24 に Eve が入社していますので,社員数は 3 となります。

最新の社員リスト

2018年いっぱいで Bob が退職し,2019-01-01 に Tom が入社していますので,社員数は 3 となります。

まとめ

MariaDB Server 10.3 で新たに導入されたテンポラル・テーブルについて解説いたしました。複雑なSQL文を用いたり,アプリケーション側で日時の演算を行うことなく,任意の過去の時点でのレコードを簡単に参照可能であることが確認できました。
商用データベースでは以前から同様の機能を備えているものもあり,MariaDBへの移行を検討されている方にとって有益な新機能と考えます。


執筆者情報

後藤 智(GOTO Satoru)
2017年6月よりMariaDB CorporationにてAPAC(Asia Pacific)地域におけるプリセールス業務を主に担当。現在は主に日本を担当。
この執筆者の他の記事をよむ
Return Top