MongoDB中的定時(shí)索引

MongoDB中存在一種索引,叫做TTL索引(time-to-live index,具有生命周期的索引)夕膀,這種索引允許為每一個(gè)文檔設(shè)置一個(gè)超時(shí)時(shí)間羽利。一個(gè)文檔達(dá)到預(yù)設(shè)置的老化程度后就會(huì)被刪除变丧。
數(shù)據(jù)到期對(duì)于某些類型的信息非常有用,例如機(jī)器生成的事件數(shù)據(jù)把将,日志和會(huì)話信息没酣,這些信息只需要在數(shù)據(jù)庫中保存有限的時(shí)間王财。

在createIndex中指定expireAfterSeconds選項(xiàng)就可以創(chuàng)建一個(gè)TTL索引:

// 超時(shí)時(shí)間為24小時(shí),默認(rèn)是前臺(tái)運(yùn)行,可以通過background:true設(shè)置為后臺(tái)模式
db.user_session.createIndex({"updated":1},{expireAfterSeconds:60*60*24});

這樣在updated字段上創(chuàng)建了一個(gè)TTL索引裕便。如果一個(gè)文檔的updated字段存在并且它的值是日期類型绒净,當(dāng)服務(wù)器時(shí)間比文檔的updated字段的時(shí)間晚expireAfterSeconds秒時(shí),文檔就會(huì)被刪除偿衰。

db.getCollection('user_session').insert(
  {
    _id: NumberInt(1),
    "updated":new Date(),
     username:'lisi'
  }
);

mongodb保存時(shí)間使用的UTC時(shí)間挂疆,在查詢出來的結(jié)果的時(shí)候會(huì)轉(zhuǎn)換為GMT時(shí)間,所以你看到保存的時(shí)間和電腦時(shí)間相差8個(gè)小時(shí)(GMT+8)
db.getCollection('user_session').find({updated:{$gt: new Date("2019-07-12 14:00:00")}}) 在查詢的時(shí)候可以使用new Date()直接進(jìn)行時(shí)間的比較下翎,new Date傳入的參數(shù)是GMT時(shí)間

為了防止活躍的會(huì)話被刪除缤言,可以在會(huì)話上有活動(dòng)發(fā)生時(shí)將updated字段的值更新為當(dāng)前時(shí)間。只要updated的時(shí)間距離當(dāng)前時(shí)間達(dá)到24小時(shí)视事。相應(yīng)的文檔就會(huì)被刪除胆萧。

MongoDB的TTL功能依賴于mongodb中的后臺(tái)線程,該線程讀取索引中的日期類型值并從集合中刪除過期的文檔郑口。
MongoDB每分鐘對(duì)TTL索引進(jìn)行一次清理鸳碧,所以不應(yīng)該依賴以秒為單位的時(shí)間保證索引的存活狀態(tài)。而且TTL索引不保證在到期時(shí)立即刪除過期數(shù)據(jù)犬性。文檔到期的時(shí)間與MongoDB從數(shù)據(jù)庫中刪除文檔的時(shí)間之間可能存在延遲瞻离。由于刪除過期文檔的后臺(tái)任務(wù)每60秒運(yùn)行一次。所以乒裆,文檔可能在文檔到期和后臺(tái)任務(wù)運(yùn)行之間的期間保留在集合中套利。

源碼在 https://github.com/mongodb/mongo/blob/master/src/mongo/db/ttl.cpp

mongodb不支持使用createIndex來重新設(shè)置過期時(shí)間,只可以使用collMod命令修改expireAfterSeconds的值:

db.runCommand({collMod:"user_session",index: {name:"updated_1",expireAfterSeconds: 120}});

修改成功后,你會(huì)收到這樣的消息(之前的過期時(shí)間是一分鐘,現(xiàn)在修改為2分鐘)

{
    "expireAfterSeconds_old" : 60.0,
    "expireAfterSeconds_new" : 120.0,
    "ok" : 1.0
}

在一個(gè)給定的集合上可以有多個(gè)TTL索引肉迫,你可以在created和updated字段分別建立ttl索引,但是不能同時(shí)使用兩個(gè)字段建立復(fù)合ttl索引,也不能在同一個(gè)字段上又是創(chuàng)建TTL索引验辞,又是創(chuàng)建普通索引,但是可以像“普通索引”一樣用來優(yōu)化排序和查詢喊衫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末跌造,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子族购,更是在濱河造成了極大的恐慌壳贪,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寝杖,死亡現(xiàn)場(chǎng)離奇詭異违施,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瑟幕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門磕蒲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人只盹,你說我怎么就攤上這事辣往。” “怎么了鹿霸?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵排吴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我懦鼠,道長(zhǎng),這世上最難降的妖魔是什么屹堰? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任肛冶,我火速辦了婚禮,結(jié)果婚禮上扯键,老公的妹妹穿的比我還像新娘睦袖。我一直安慰自己,他們只是感情好荣刑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布馅笙。 她就那樣靜靜地躺著,像睡著了一般厉亏。 火紅的嫁衣襯著肌膚如雪董习。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天爱只,我揣著相機(jī)與錄音皿淋,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窝趣,可吹牛的內(nèi)容都是我干的疯暑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼哑舒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼妇拯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起洗鸵,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤乖阵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后预麸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞪浸,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年吏祸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了对蒲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贡翘,死狀恐怖蹈矮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鸣驱,我是刑警寧澤泛鸟,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站踊东,受9級(jí)特大地震影響北滥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闸翅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一再芋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坚冀,春花似錦济赎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至液南,卻和暖如春壳猜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贺拣。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工蓖谢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捂蕴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓闪幽,卻偏偏與公主長(zhǎng)得像啥辨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盯腌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. 介紹溉知、安裝、使用(簡(jiǎn)單寫寫腕够,不做詳細(xì)介紹) 1.1 介紹 Mongodb是屬于NoSql的一種數(shù)據(jù)類型级乍; M...
    Grace_ji閱讀 1,553評(píng)論 0 0
  • 索引是一種數(shù)據(jù)結(jié)構(gòu)[一語道破天機(jī)]。為數(shù)據(jù)建立合適的索引帚湘,查詢時(shí)能夠不斷縮小范圍玫荣,提高效率。MongoDB的索引數(shù)...
    何甜甜在嗎閱讀 1,940評(píng)論 0 1
  • 本文包括以下幾個(gè)方面: –安全措施 – 部署架構(gòu) – 系統(tǒng)優(yōu)化 – 索引設(shè)計(jì) – 備份監(jiān)控 – 模式設(shè)計(jì) – 程序...
    張偉科閱讀 3,984評(píng)論 0 9
  • ▏重資產(chǎn)的生產(chǎn)制造投資回報(bào)低焙贷,這是個(gè)全球現(xiàn)象。這是為什么最近幾十年來贿堰,很多跨國企業(yè)一直在外包制造辙芍,走輕資產(chǎn)經(jīng)營的路...
    華商智造閱讀 332評(píng)論 1 0
  • 人吶,好神奇羹与,忙了覺得累故硅,閑了又嫌空虛無聊,總是希望得到更多的好注簿,總之契吉,從來沒有感覺到滿意的時(shí)候,那么就可以...
    我只是一個(gè)大俠閱讀 298評(píng)論 0 0