全部產品
Search
文件中心

PolarDB:概述

更新時間:May 28, 2025

本文介紹了在PolarDB MySQL版中到期資料清理(TTL)功能的實現原理。

問題現象

Time to Live (TTL) 功能常見於NoSQL資料庫和基於LSM Tree的儲存引擎中,提供了鍵(KEY)和行(Row)層級的生命週期控制策略。這一功能在某些情境下可以有效節省儲存空間。在KVStore for Redis中,可以藉助後台線程定期掃描到期的鍵並將其刪除,而在基於LSM Tree的資料庫中,可藉助壓縮(Compact)線程,定期清理到期的資料行。

樣本

在傳統的關係型資料庫中(如 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. 建立一個定時任務,每隔5min(可自訂)運行一次任務,根據sent_at欄位,刪除那些已經到期的資料行
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功能。

版本限制

PolarDB MySQL版適用的資料庫引擎版本如下:

  • MySQL 8.0.1且小版本需為8.0.1.1.49及以上版本。

  • MySQL 8.0.2且小版本需為8.0.2.2.27及以上版本。

如何查看核心版本,請參見核心版本說明