国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MongoDB定容集合(Capped Collection)

這篇具有很好參考價值的文章主要介紹了MongoDB定容集合(Capped Collection)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

定容集合

定容集合行為

使用場景

限制和建議

使用方法

構(gòu)建定容集合

查詢

確定集合是否定容

將集合轉(zhuǎn)換成定容集合

修改空間大小

修改文檔數(shù)量限制

末尾持續(xù)游標(biāo)(tailable cursor)


Mongodb的文檔保存在集合當(dāng)中,類似關(guān)系型數(shù)據(jù)庫當(dāng)中的表。用戶對集合進(jìn)行增刪改查操作。

定容集合

定容集合,是一種固定大小的集合。支持?jǐn)?shù)據(jù)的快速插入和按照插入順序的高速讀取。定容集合工作機制類似循環(huán)緩存。當(dāng)集合大小達(dá)到用戶指定的大小時,新插入的數(shù)據(jù)會覆蓋最早插入的數(shù)據(jù)。

作為定容集合的替代方案,用戶還可以選擇定時索引。建立索引是指定索引數(shù)據(jù)的過期時間。當(dāng)插入數(shù)據(jù)的時間索引字段超過過期時間后,mongodb或自動清除該數(shù)據(jù)。本文終點探討定容集合,定時索引內(nèi)容請參照其他文檔。

定容集合行為

定容集合容量大小是確定的,并且保證數(shù)據(jù)按照插入順序排列,因此具有下面的幾個行為。

  • 數(shù)據(jù)按照插入時間排序,查詢時無需構(gòu)建其他時間字段索引來對文檔查詢順序。因此提高了數(shù)據(jù)插入性能。
  • 自動刪除最先插入的數(shù)據(jù)。當(dāng)達(dá)到容量限制時,定容集合自動刪除最先插入的數(shù)據(jù),無需顯示執(zhí)行刪除操作或額外的刪除腳本。
  • 定容集合有_id字段和_id字段索引。

使用場景

針對定容集合高效插入和保證按照插入順序讀取數(shù)據(jù)的特性,定容集合適應(yīng)下面兩個場景

  1. 保存系統(tǒng)日志。 因為無需構(gòu)建額外的索引,索引向定容集合插入數(shù)據(jù)時,具備與直接寫入文件系統(tǒng)類似的性能。其先入先出的特性,保證了寫入時間的順序。因此適合用來保存系統(tǒng)日志。 mongodb的oplog就使用了定容集合。
  2. 將定容集合作為緩存,保存少量數(shù)據(jù)。

限制和建議

  • 自mongodb5開始,定容集合禁止使用snapshot讀取方式
  • 當(dāng)用戶更新定容集合的數(shù)據(jù)時,可以添加索引避免全表掃描。當(dāng)然,更新完成后,建議刪除改索引。
  • 定容集合,不可分片
  • 使用默認(rèn)排序可以高效的讀取定容集合數(shù)據(jù),這與在unix系統(tǒng)中使用tail方法讀取日志文件類似。
  • 禁止使用$out方法向定容集合寫入數(shù)據(jù)
  • 禁止在mongodb事務(wù)中向定容集合寫入數(shù)據(jù)。

使用方法

構(gòu)建定容集合

使用db.createCollection()方法,顯式創(chuàng)建定容集合。定義定容集合時,必須指定集合空間大小。mongodb在分配定容集合存儲空間時,按照256bytes的倍數(shù)來分配大小。mongodb計算出小于用戶指定空間大小的最大的256的倍數(shù)。定容集合最大存儲空間,不能超過1PB。

db.createCollection("<collectionName>", {capped: true, size: <collection_size>}) 

其中,collection_size的單位是字節(jié)(bytes)

db.createCollection("log", {capped: true, size: 100000})

db.getCollectionInfos({name: "log"})
{
	"name" : "log",
	"type" : "collection",
	"options" : {
		"capped" : true,
		"size" : 100000
	},
	"info" : {
		"readOnly" : false,
		"uuid" : UUID("d11d3f1b-74ff-4dcc-89e3-e43051c8e3d7")
	},
	"idIndex" : {
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	}
}

除了指定集合空間大小之外,用戶還可以指定集合文檔的數(shù)量

db.createCollection("log", {capped: true, size:100000, max:500})

db.getCollectionInfos({name: "log"})
{
	"name" : "log",
	"type" : "collection",
	"options" : {
		"capped" : true,
		"size" : 100000,
		"max" : 500
	},
	"info" : {
		"readOnly" : false,
		"uuid" : UUID("38120a0b-31e9-471e-a15d-45dbf3314323")
	},
	"idIndex" : {
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	}
}

定容集合中,必須指定大小。當(dāng)定容集合容量已滿而未達(dá)到用戶指定的最大文檔數(shù)量時,定容集合會刪除最先插入的數(shù)據(jù)。

查詢

使用find()方法查詢定容集合。如果沒有指定排列順序,數(shù)據(jù)按照插入順序返回。

db.cappedCollection.find()

如果查詢插入數(shù)據(jù)的倒序,需要在查詢語句中指定排列順序。

db.cappedCollection.find().sort({$natural: -1})

確定集合是否定容

使用命令isCapped()查看一個集合是否是定容集合。

db.collection.isCapped()

db.log.isCapped()
true

將集合轉(zhuǎn)換成定容集合

使用命令convertToCapped, 將非定容集合轉(zhuǎn)換成定容集合。但必須指定定容集合所占空間大小。集合轉(zhuǎn)換為定容集合時,mongodb會為當(dāng)前集合添加排它鎖。其他人任何操作本集合的操作,需要等待定容集合轉(zhuǎn)換完成

db.runCommand( {"convertToCapped": "<collection_name>", size: 100000})

db.runCommand( {"convertToCapped": "books", size: 100000})

db.books.isCapped()
true

修改空間大小

在collMod中,使用cappedSize指定定容集合空間大小。最大空間可超過1PB。

db.runCommand( {collMod: "log", cappedSize: 100000})

修改文檔數(shù)量限制

在collMod中,使用cappedMax指定已有定容集合文檔數(shù)量。當(dāng)cappedMax值定義為負(fù)數(shù)或0時,沒有文檔數(shù)量限制。當(dāng)指定的cappedMax數(shù)量小于當(dāng)前定容集合文檔數(shù)量時,定容集合會按照文檔插入順序,刪除超過數(shù)量限制的文檔。

db.runCommand( {collMod: "log", cappedMax: 500})

末尾持續(xù)游標(biāo)(tailable cursor)

定容集合支持一種特殊的游標(biāo)。當(dāng)游標(biāo)讀取到最后一個文檔后,該游標(biāo)不會關(guān)閉,等到有新的數(shù)據(jù)插入到定容集合時,該游標(biāo)返回新插入的數(shù)據(jù),并保持開啟狀態(tài)。這與unix中的命令tail -f類似,直到文件結(jié)束,命令才終止。

tailableCursor比使用索引,按照插入的自然順序返回數(shù)據(jù)。這樣從頭讀取集合中的數(shù)據(jù),對數(shù)據(jù)庫和網(wǎng)絡(luò)的開銷是巨大的。但游標(biāo)耗盡走到最后讀取新插入的數(shù)據(jù)時,開銷是微小的。文章來源地址http://www.zghlxwxcb.cn/news/detail-764036.html

到了這里,關(guān)于MongoDB定容集合(Capped Collection)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包