2016-11-19 38 views
2

我有一個數據庫,它有一個時間戳列,我希望過期的數據被刪除。每n秒自動從數據庫中刪除過時的行

所以我的想法是寫一個.php文件的MySQL查詢,刪除每一行,其中timestamp < current_timestamp - const。由於會有很多行需要檢查,我將設置索引到時間戳列。

那麼如何每n秒自動運行一次這個腳本呢?我聽說過Linux crontab - 我可以在我的web服務器(而不是數據庫服務器)上使用它來定期執行.php文件,這是從數據庫中刪除過期行的一種很好的技術嗎?

數據庫在Amazon Web Services上的RDS實例上設置。我的網絡服務器是一個EC2實例(也是亞馬遜網絡服務)。

回答

4

做這樣的事情需要設置一個事件或工作。這種努力使數據庫非常繁忙。

我強烈推薦一種不同的方法。使用視圖來訪問你想要的數據:

create view v_t as 
    select t.* 
    from t 
    where timestamp > CURRENT_TIMESTAMP - ??; 

然後用這個視圖來訪問數據。

然後,定期清理表格以擺脫不需要的行。您可以每天一次,每週一次,每小時一次 - 可以在數據庫負載較輕時發生刪除,因此不會影響用戶。