MongoDB Capped集合 使用注意事項

Capped集合簡介

  • 1,Capped集合是一個固定大小,高性能的,文檔按照插入順序的一個集合。
    新的對象會把覆蓋舊的對象,像環形緩存一樣。

  • 2,find時默認就是插入的順序,Capped集合會自動維護。

  • 3,Capped 集合用來解決top 多少的問題,最新的top條評論,最活躍的top用戶...

Capped集合創建語法

db.createCollection("集合名稱", { capped : true, size : num, max : num } )

db.createCollection("log", { capped : true, size : 1000, max : 5 } )
  • 1, size用來指定集合大小,單位KB。

  • 2, 限制集合中對象的個數:可以在創建時設置max參數。

  • 3, 指定mac數量的時候必須同時指定size容量。淘汰機制只有在容量還沒有滿時才會依據文檔數量工作。
    要是容量滿了,淘汰機制會依據容量來工作。

db.log.insert({"name":"u1"})
db.log.insert({"name":"u2"})
db.log.insert({"name":"u3"})
db.log.insert({"name":"u4"})
db.log.insert({"name":"u5"})
db.log.find()
{ "_id" : ObjectId("598d6cacde67b24068234115"), "name" : "u1" }
{ "_id" : ObjectId("598d6cb0de67b24068234116"), "name" : "u2" }
{ "_id" : ObjectId("598d6cb4de67b24068234117"), "name" : "u3" }
{ "_id" : ObjectId("598d6cb8de67b24068234118"), "name" : "u4" }
{ "_id" : ObjectId("598d6cbcde67b24068234119"), "name" : "u5" }

//再插入一個數據 將會覆蓋掉第一條數據
db.log.insert({"name":"u6"})
db.log.find()
{ "_id" : ObjectId("598d6cb0de67b24068234116"), "name" : "u2" }
{ "_id" : ObjectId("598d6cb4de67b24068234117"), "name" : "u3" }
{ "_id" : ObjectId("598d6cb8de67b24068234118"), "name" : "u4" }
{ "_id" : ObjectId("598d6cbcde67b24068234119"), "name" : "u5" }
{ "_id" : ObjectId("598d8faede67b2406823411a"), "name" : "u6" }



查看一個集合是不是Capped集合

db.collection.isCapped()
    db.log.isCapped()
    true  //false 不是Capped集合

查看Capped集合狀態

 db.log.stats()
{
    "ns" : "leyue.log",
    "count" : 4,
    "size" : 140,
    "avgObjSize" : 35,
    "storageSize" : 36864,
    "capped" : true,
    "max" : 5,
    "maxSize" : 1024,
    "sleepCount" : 0,
    "sleepMS" : 0,
    ....
}
  • 1, max: Capped集合最多可以有多少條數據

  • 2, maxSize:Capped集合最多可以有多少字節


把一個集合轉換成Capped集合,反之不行

db.runCommand({"convertToCapped": "要轉換的集合", size: 100000});
db.runCommand({"convertToCapped": "mycoll", size: 100000}); 


注意事項

  • 1,32位機器上,一個Capped集合的最大值約為482.5M,64位只受系統文件大小的限制,
    創建的時候,可以預指定大小。

  • 2,可以向Capped 集合中加入數據,但不能刪除數據,也不能改變集合大小。

  • 3,可以使用drop 方法刪除集合,刪除后,需顯示的重新創建這個集合。

    db.log.drop()
    true
    
    db.createCollection("log", { capped : true, size : 1000, max : 5 } )
    { "ok" : 1 }

固定集合屬性及用法

屬性

  • 屬性1:對固定集合進行插入速度極快
  • 屬性2:按照插入順序的查詢輸出速度極快

  • 屬性3:能夠在插入最新數據時,淘汰最早的數據

用法

  • 用法1:儲存日志信息

  • 用法2:緩存一些少量的文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,886評論 18 139
  • 翻譯自“Collection View Programming Guide for iOS” 0 關于iOS集合視...
    lakerszhy閱讀 3,919評論 1 22
  • 想想,現在已經是工作中的第四個年頭了,知道這一點,我突然間不知所措。 (1)朋友的困惑 遇到一個朋友,她從一家公司...
    王久立閱讀 3,387評論 1 6
  • 這年高考剛過去沒幾天,給朋友發的任何信息她都沒有回。 我想,她或是怕我問起她的考試,或者她不會再想起我。 去年的六...
    貍小笨閱讀 339評論 2 2
  • 在家休息了兩個月,身體恢復的差不多了,妹妹讓我早點出門,于是今夏的旅行開始了。 基于我們兩都是無業...
    妖媚兒閱讀 283評論 2 2