このトピックでは、PolarDB for MySQL クラスターで Time to Live(TTL)機能がどのように実装されているかについて説明します。
背景情報
NoSQL データベースとログ構造マージツリー(LSM ツリー)ベースのストレージエンジンで普及している TTL 機能は、キーと行レベルのライフサイクル管理ポリシーを実装します。 TTL 機能は、特定のシナリオでストレージ容量を効率的に節約できます。 Key-Value ストアでは、バックグラウンド スレッドが定期的に期限切れのキーをスキャンして削除します。 LSM ツリーに基づくデータベースでは、コンパクション スレッドが定期的に期限切れのデータ行をクリーンアップします。
例
MySQL、Oracle、PostgreSQL などの従来のリレーショナルデータベースは、TTL 機能をネイティブにサポートしていません。 同様の機能は、トリガーまたはストアドプロシージャを使用して実現されます。
-- 1. 各行の時間情報を示す列を持つテーブルを作成します。
CREATE TABLE messages(
message_id VARCHAR(36) PRIMARY KEY,
sender_id VARCHAR(36),
receiver_id VARCHAR(36),
message_text TEXT,
sent_at TIMESTAMP
);
-- 2. sent_at フィールドに基づいて期限切れの行を削除するために 5 分ごとに実行されるスケジュールされたタスクを作成します。
SET GLOBAL event_scheduler = ON;
CREATE EVENT delete_old_messages
ON SCHEDULE
EVERY 5 MINUTE
STARTS CURRENT_TIMESTAMP
DO
DELETE FROM messages
WHERE sent_at < DATE_SUB(NOW(), INTERVAL 5 MINUTE);ただし、この方法では、次の問題が発生する可能性があります。
期限切れの行が最も早く削除されない場合、期限切れの行がまだクエリされる可能性があります。
大量のデータを削除する必要がある場合、データベースのパフォーマンスが変動する可能性があります。
したがって、データベースシステムは、より正確で効率的な TTL 管理のために TTL 機能をネイティブにサポートする必要があります。
サポートされているバージョン
次のエンジンバージョンを実行しているクラスターで TTL 機能を使用できます。
リビジョンバージョンが 8.0.1.1.49 以降の PolarDB for MySQL 8.0.1。
リビジョンバージョンが 8.0.2.2.27 以降の PolarDB for MySQL 8.0.2。
クラスターのデータベースエンジンバージョンを表示する方法については、「エンジンバージョンのクエリ」をご参照ください。