mongodb 3.x 之實用新功能窺看[1] ——使用TTLIndex做Cache處理

来源:http://www.cnblogs.com/huangxincheng/archive/2016/07/29/5718038.html
-Advertisement-
Play Games

mongodb一直都在不斷的更新,不斷的發展,那些非常好玩也非常實用的功能都逐步加入到了mongodb中,這不就有了本篇對ttlindex的介紹, 剛好我們的生產業務場景中就有這個一個案例。。。 一:案例分析 我們生產的推薦系統要給用戶發送簡訊和郵件的關聯營銷。第一波是:當用戶在淘寶上下訂單之後,我 ...


  mongodb一直都在不斷的更新,不斷的發展,那些非常好玩也非常實用的功能都逐步加入到了mongodb中,這不就有了本篇對ttlindex的介紹,

剛好我們的生產業務場景中就有這個一個案例。。。

 

一:案例分析

     我們生產的推薦系統要給用戶發送簡訊和郵件的關聯營銷。第一波是:當用戶在淘寶上下訂單之後,我們發送一次簡訊和郵件千人千面,第二波:

為了增加回購率,當用戶在10天之後的交易預設完成之後,我們將會再次觸發簡訊和郵件方式的千人千面,場景就這樣的,針對這種場景,我就畫出了

下麵的圖。

其實呢,業務場景就是這樣的,看起來非常簡單,重點就在這裡,第一波營銷中已經下單成功的客戶我們需要給保存起來,因為10天後我們需要對這

一批用戶再發送一次,這樣我們就需要用mongodb把當時已經下單成功的用戶保存到mongodb中,如果你不maintain mongodb的話,那麼mongodb

的數據將會積壓的越來越多,這個時候我們就需要有一個機制,清空mongodb中10天之前的數據,對吧,因為這些數據已經是垃圾數據了,為了免去自己

寫個腳本去清除這些麻煩的數據,這次我們使用ttlindex來讓這些數據保存10天,也就是10天之後自動過期。

 

二:ttlIndex

    現在我想大家對ttlIndex有了大概的認識了,下麵我們看看怎麼創建,我使用的GUI工具是robomongo,大家可以在官網上下載一下即可。。。然後我們

要查詢一下https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/#db.collection.createIndex,看看這種collection

怎麼創建。

db.collection.createIndex(keys, options)

從這個options中的expireAfterSeconds參數來看,這個value是一個int,並且是以second為單位,然後我們可以看到,這個ttlIndex是需要建立在docment

的field上面的,然後我們繼續往下看。

To create a TTL index, use the db.collection.createIndex() method with the expireAfterSeconds option on a field whose value is either a date or an array that contains date values.

 

從這句話中其實可以看到,這個field欄位要麼是date,要麼是array中含有date欄位,ok,看完這裡,我們都明白了,接下來,我們創建一個簡單的planeollection,

並且date的過期時間是2s,主要是用來測試一下嘛。。。

 

ok,其實就是這麼簡單,然後我們過60s之後再查看一下數據,可以看到,數據已經沒有啦~~~

 

可能有些人就有疑問了,為什麼這裡要說最多60s之後再查看數據,當然是有原因的,因為mongod有一個background task,60s啟動一次進行index scan,

如果過期,那麼就會進行清除,不信的話,你可以看下官網的描述哦。

 

好了,本篇就說這麼多,我想大家應該也知道瞭如何使用ttlIndex,當然我們也在幸福滿滿的使用這個玩意,感謝感謝~~~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這是spark1.5及以前堆記憶體分配圖 下邊對上圖進行更近一步的標註,紅線開始到結尾就是這部分的開始到結尾 spark 預設分配512MB JVM堆記憶體。出於安全考慮和避免記憶體溢出,Spark只允許我們使用堆記憶體的90%,這在spark的spark.storage.safetyFraction 參數 ...
  • 一、介紹基本資料庫的埠號、 SQLServer 埠號:1433 MySql 埠號:3306 Oracle 埠號:1521 二、orcl的基礎介紹 1)什麼是orcl 是一款關係型(二維表)資料庫,可以用來存儲海量數據。在大數據量併發檢索的情況下,性能要高於其他的同類資料庫產品。一般運行環境是 ...
  • 安裝 配置資料庫 配置驅動 配置連接 配置驅動 配置連接 如果你的工作中,需要使用到多個資料庫,又不想在多種客戶端之間切換來切換去。那麼就需要找一款支持多資料庫的客戶端工具了。如果你要連接多個關係型資料庫,你就可以使用Navicat Premium。但是如果你有使用到NOSQL(譬如HBase、Mo ...
  • 當我看到sql執行很慢的時候就在想為什麼這麼慢? 不外乎數據大,sql語句複雜,沒有索引。 如果要進行優化的話可以從對應的這三個問題出發: 看看表是否可以進行拆分成小表,拆分sql語句,建立適合的索引。 還有查看sql server官方API文檔,瞭解sql的關鍵字執行順序,瞭解執行順序後才能更好的 ...
  • 1.事務的四個屬性 原子性Atomicity,一致性Consistency,隔離性Isolation,持久性Durability ,即ACID特性。 原子性:事務必須是一個完整工作的單元,要麼全部執行,要麼全部不執行。 一致性:事務結束的時候,所有的內部數據都是正確的。 隔離性:併發多個事務時,各個 ...
  • 背景 在使用Oracle或者其它資料庫時,使用like 關鍵字進行模糊查詢是大家經常使用的功能,在純中文環境中使用非常好用,還有一些通配符可以使用,但是在純英文環境中,會出現大小需要精確匹配的問題,主要原因還是字元串的問題 FL like '%{0}%' and 這裡like後是一個字元串,這樣必然 ...
  • 利用SQl對資料庫實行數據拆分與組合實現提供以下幾種方案: 方法一: WITH CTE AS (SELECT A.Id,A.[Uid],UserName FROM (SELECT A.[id], REPLACE(Split.a.value('.', 'NVARCHAR(max)'),'''','') ...
  • 一、前言 近兩天項目升級數據遷移,將老版本(sqlserver)的數據遷移到新版本(mysql)資料庫,需要整理一個Excel表格出來,映射兩個庫之間的表格欄位,示例如下: Mysql資料庫查詢表結構很方便,用客戶端(SQLyog)可以直接複製出需要的表結構,據說可以用簡單的命令查詢表結構,但是不會 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...