MongoDB中設置expire過時自動刪除

關鍵詞: expireAfterSeconds、TTL測試

TTL Time to Livespa

 

相似Redis中的expire機制,MongoDB也能夠設置過時自動刪除的表。code

MongoDB的過時設置依賴索引(TTL-index),設置過時字段使用的索引後,插入數據時在該字段指定日期時間,blog

通過在建立索引時指定的秒數後,該記錄會被MongoDB認爲已通過期,而後刪除。索引

 

JS版class

db.test_timer.createIndex({"timer":1}, {expireAfterSeconds: 10})
db.test_timer.insert({"timer":new Date(), "a":'abc'})  // 指定當前時間
db.test_timer.insert({"timer": new Date("2017/3/25 13:11:00"), "c": "CC"})  // 指定任意時間

 

Python版test

建立索引和指定過時時間的方式相似,要注意的是過時時間的字段必須使用UTC時間,不然沒法正常刪除記錄
所以指定過時時間刪除雖然也能夠起做用,可是不能肯定刪除時間很是精確。import

from pymongo import MongoClient
cli = MongoClient()
db = cli['test']
tbl = db['test_timer2']
tbl.create_index([("timer2", 1)], expireAfterSeconds=10)
from datetime import datetime
tbl.insert({"timer2": datetime.utcnow(), "user": "Hehehehe!"})

from time import strptime, time, mktime
t1 = strptime("2017/3/25 13:36:02", "%Y/%m/%d %H:%M:%S")
t2 = datetime.utcfromtimestamp(mktime(t1))
tbl.insert({"timer2": t2, "CC": 12345})
tbl.insert({"timer2": 123, "TT": 1})  # TTL-index字段也能夠是其餘值,這是就不能被自動刪除
cli.close()

 

通過測試,實際刪除數據的時間與索引加上數據指定的時間點之間存在偏移,多是MongoDB刪除數據機制的問題。cli

相關文章
相關標籤/搜索