mongodb固定集合(Capped Collection)和大文件管理(GridFS)


Capped Collection

固定集合(Capped Collection)是性能出色的有着固定大小的集合,以LRU(Least Recently Used最近最少使用)規則和插入順序進行age-out(老化移出)處理,自動維護集合中對象的插入順序,在創建時要預先制定大小,如果空間用完,新添加的對象將會取代集合中最舊的對象,永遠保持最新的數據。

查看集合的狀態信息 db.cot1.stats(); //查看集合cot1的狀態信息
 刪掉指定集合 db.collection1.drop(); //刪除collection1集合
 mongoDB中集合創建默認是隱式創建的,可以使用createCollection顯示創建集合 db.createCollection("collect"); 刪掉指定數據庫 db.dropDatabase(); //刪除當前數據庫
 查詢所有數據庫 show dbs //查詢所有數據庫
 顯示當前庫中所有集合 show tables; 或者 show collections;

 

固定集合的功能特點

可以插入及更新,但更新不能超出collection的大小,否則更新失敗,不允許刪除,但是可以調用drop()刪除集合中的所有行,但是drop后需要顯式地重建集合.在32位機子上一個cappped collection的最大值約為482.5M,64位上只受系統文件大小的限制.

 

固定集合屬性及用法:

屬性1:對固定集合進行插入速度極快

屬性2:按照插入順序的查詢輸出速度極快

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

 

用法1:儲存日志信息

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

 

創建固定集合

不像普通集合,固定集合需要顯示的創建使用createCollection命令

eg. db.createCollection("collect",{capped:true, size:10000});

創建一個集合為collect的固定集合,大小為10000字節,還可以指定文檔個數,加上Max:100屬性.

注意:指定文檔上限,必須指定大小,文檔限制是在容量沒滿時進行淘汰,要是滿了,就根據容量限制來進行淘汰.

 

可以再創建capped collection時指定collection中能夠存放的最大文檔數目,但這是要指定size,因為總是先檢查size后檢查maxRowNumber.可以使用validate()查看一個collection已經使用了多少空間,從而決定size設為多大. > db.createCollection("mycappedcoll",{capped:true,size:10000,max:100}) { "ok" : 1 } > db.mycappedcoll.validate(); 創建collection時還有一個參數”autoIndexID”,值可以為”true”和”false”,決定是否需要在”_id”上創建索引,例如 > db.createCollection("mycappedcoll",{capped:true,size:10000,max:100,autoIndexId:false}) 默認情況下對一般的collection是創建索引的,但不會對capped collection創建.capped collection不能被Shard,這也是有道理的,一個經常被刷新且大小固定的表,做Sharding(分片)也沒太大意義.

 

轉換集合

把普通的集合轉換成固定集合需要使用convertTocapped命令

db.runCommand( { convertTocapped:"test",size:10000 } );

把test普遍集合轉換為固定集合,大小為10000字節.

 

自然排序

固定集合文檔按照插入順序儲存的,默認情況下查詢就是按照插入順序返回的,也可以使用$natural調整返回順序.

db.mycappedcolt.find().sort( {"$natural":1} );

參數1表示默認順序,-1則相反.

 

判斷集合是否為固定集合

db.colt.isCapped();

 

查看集合狀態信息

db.colt.stats();

 

GridFS

GridFS是一種在MongoDB中存儲大二進制文件的機制,使用GridFS原因有以下幾種:

儲存巨大的文件,比如視頻、高清圖片等.利用GridFS可以簡化需求.

GridFS會直接利用已經建立的復制或分片機制,故障恢復和擴展都很容易.

GridFS可以避免用戶上傳內容的文件系統出現問題.

GridFS不產生磁盤碎片

 

GridFS存儲數據

GrdiFS使用兩個表來存儲數據:

files 包含元數據對象

chunks 包含其他一些相關信息的二進制塊.

為了使多個GridFS命名為一個單一的數據庫,文件和塊都有一個前綴,默認情況下,前綴是fs,所以任何默認的GridFS存儲將包括命名空間fs.files和fs.chunks。

各種第三方語言可以更改其前綴

 

使用GridFS mongofiles

mongofiles是從命令行操作GridFS的一種工具

四個命令:put(存儲)、get(取得/下載)、list(列表)、delete(刪除)

eg. ./mongofiles put testfile.zip ./mongofiles list ./mongofiles get testfile.zip ./mongofiles delete testfile.zip 驗證md5 mg5sum testfiles.zip 此時登錄mongo,show tables可以看到新增2個文件fs.files和fs.chunks. 查看fs.files中的內容 db.fs.files.find(); fs.files 中存儲的是一些基礎的元數據信息. db.fs.chunks.find(); fs.chunks 中存儲的是一些實際的內容數據信息.

轉載請注明出處:[http://www.cnblogs.com/dennisit/archive/2013/01/28/2880657.html]

在線交談


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM