鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ 固定集合
更新文檔
GridFS
Rockmongo 管理工具
Map Reduce
Java
創(chuàng)建備份
數(shù)據(jù)模型
創(chuàng)建數(shù)據(jù)庫(kù)
映射
查詢文檔
索引限制
ObjectId
刪除文檔
數(shù)據(jù)類型
高級(jí)索引
索引
優(yōu)勢(shì)
記錄排序
查詢分析
插入文檔
刪除集合
全文檢索
創(chuàng)建集合
概述
數(shù)據(jù)庫(kù)引用
覆蓋索引查詢
安裝環(huán)境
PHP
刪除數(shù)據(jù)庫(kù)
固定集合
關(guān)系
聚合
自動(dòng)增長(zhǎng)
復(fù)制
限制記錄
部署
分片
正則表達(dá)式
原子操作

固定集合

固定集合(Capped Collection)是一種尺寸固定的“循環(huán)”集合,可提供高效的創(chuàng)建、讀取、刪除等操作。這里所指的“循環(huán)”的意思是,當(dāng)分配給集合的文件尺寸耗盡時(shí),就會(huì)自動(dòng)開(kāi)始刪除最初的文檔,不需要提供任何顯式的指令。

如果文檔更新后增加了文檔的尺寸,那么固定集合會(huì)限制對(duì)文檔的更新。因?yàn)楣潭习凑沾疟P(pán)存儲(chǔ)的順序來(lái)保存文檔,所以能確保文檔尺寸不會(huì)增加磁盤(pán)分配的尺寸。固定集合最適合保存日志信息,緩存數(shù)據(jù)以及任何其他大容量數(shù)據(jù)。

創(chuàng)建固定集合

要想創(chuàng)建固定集合,需要使用 createCollection 命令,并將 capped 選項(xiàng)設(shè)為 true,同時(shí)還需要指定集合的最大尺寸(以字節(jié)計(jì))。

>db.createCollection("cappedLogCollection",{capped:true,size:10000})

除了集合尺寸外,還可以使用 max 參數(shù)限制集合中的文檔最大數(shù)量。

>db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})

如果想要檢查集合是否固定,使用 isCapped 命令即可。

>db.cappedLogCollection.isCapped()

如想將現(xiàn)有集合轉(zhuǎn)化為固定集合,使用下列代碼:

>db.runCommand({"convertToCapped":"posts",size:10000})

上述代碼會(huì)將現(xiàn)有的 posts 集合轉(zhuǎn)化為固定集合。

查詢固定集合

默認(rèn)情況下,利用 find 查詢固定集合,結(jié)果會(huì)按照插入順序進(jìn)行顯示。但如果想按相反順序獲取文檔,可以使用 sort 命令,如下所示:

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

關(guān)于固定集合,有以下幾個(gè)非常值得注意的要點(diǎn):

  • 無(wú)法從固定集合中刪除文檔。
  • 固定集合沒(méi)有默認(rèn)索引,甚至在 _id 字段中也沒(méi)有。
  • 在插入新的文檔時(shí),MongoDB 并不需要尋找磁盤(pán)空間來(lái)容納新文檔。它只是盲目地將新文檔插入到集合末尾。這使得固定集合中的插入操作是非??焖俚?。
  • 同樣的,在讀取文檔時(shí),MongoDB 會(huì)按照插入磁盤(pán)的順序來(lái)讀取文檔,從而使讀取操作也非???。
上一篇:概述下一篇:正則表達(dá)式