VoltDB 8.2リリース(2018年7月12日)
2018年7月12日にVoltDB 8.2がリリースされていました。
この記事で既にインストールして触っているのですが、改めて変更内容を確認したいと思います。
- 古いデータを自動で削除するTTL機能
- VoltDBコマンドラインで、ファイルからユーザ名とパスワードを読み取ることができる
- ファイルのエクスポート時にクラスタ全体で一意のファイル名を作成するオプションの追加
- スナップショットのリストア時のパフォーマンス向上
- sqlcmdユーティリティは、DESCRIBE テーブル名ディレクティブをサポート
- セキュリティ強化
- その他の改善
この内、興味がもったTTL機能について実際に使用してみたいと思います。
古いデータを自動で削除するTTL機能
「time to live」(TTL)機能は、個々のテーブルに対して、データの有効期限を定義することができます。有効期限(TTL値)を過ぎると、そのテーブルのレコードが自動的に削除されます。
スキーマ定義
sqlcmdコマンドからテーブルを作成します。
CREATED_TIMESTAMPカラムがTTLを判断するデータとなります。レコード作成時に現在の日時が自動で入ります。なお、CREATED_TIMESTAMPカラムにはインデックスを作成しておく必要があります。
「USING TTL」にてTTLを定義しており、CREATED_TIMESTAMPカラムを見て、1分経過後に削除するようにしています。
クラスタ構成の場合はいずれか1台のサーバで実行します。
NOT NULL制約があればINTEGER、BIGINT、またはTIMESTAMPの列をTTL列として利用できます。
# sqlcmd
SQL Command :: localhost:21212
1> CREATE TABLE TEST_DATA_TTL (
2> NAME varchar(50) NOT NULL,
3> DATA smallint,
4> CREATED_TIMESTAMP TIMESTAMP DEFAULT NOW NOT NULL,
5> UNIQUE (NAME),
6> PRIMARY KEY (NAME)
7> ) USING TTL 1 MINUTES ON COLUMN CREATED_TIMESTAMP;
Command succeeded.
> PARTITION TABLE TEST_DATA_TTL ON COLUMN NAME;
Command succeeded.
> CREATE INDEX TEST_DATA_TTL_IDX ON TEST_DATA_TTL ( CREATED_TIMESTAMP );
Command succeeded.
テストデータをインサートします。
> insert into test_data_ttl(name, data) values('test001', 1);
検索してみると、以下のように作成されていました。
> select *, now() as now from test_data_ttl;
NAME DATA CREATED_TIMESTAMP NOW
-------- ----- --------------------------- ---------------------------
test001 1 2018-08-26 04:18:14.139000 2018-08-26 04:19:12.912000
(Returned 1 rows in 0.01s)
1分経過後に同じSQLを実行すると0件となり、レコードが自動で削除されたことを確認できます。
> select *, now() as now from test_data_ttl;
NAME DATA CREATED_TIMESTAMP NOW
----- ----- ------------------ ----
(Returned 0 rows in 0.00s)
## Statisticsシステムプロシージャ
Statisticsシステムプロシージャにて、テーブルごとに削除されたレコード数などTTLの処理に関する情報を表示することができます。
> exec @Statistics TTL TEST_DATA_TTL;
TIMESTAMP TABLE_NAME ROWS_DELETED ROWS_DELETED_LAST_ROUND ROWS_REMAINING LAST_DELETE_TIMESTAMP
-------------- -------------- ------------- ------------------------ --------------- ---------------------------
1535258021467 TEST_DATA_TTL 2 0 0 2018-08-26 04:33:41.120000
注意点
色々と注意点もあるので、もう少し利用するユースケースに合わせて検証してみないと使うかどうかは判断できないです。
- TTL用のカラムがテーブルに存在していない場合は新たにカラムを追加し、インデックスも必要となるためメモリサイジングへ影響します。
- TTLは、パーティション表で使用すると効果的ですが、レプリケートテーブルではパフォーマンスへの影響があるため好ましくありません。
- 高負荷になったり、大量の挿入があるとTTL処理が遅れる可能性があります。
- データベースレプリケーション(DR)を使用すると、TTLトランザクションがDRバイナリログの50MB制限を超える可能性があります。 この場合、警告が発行され、TTL処理が中断されます。