mongodb的固定集合(優化效率)

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(分片)也沒太大意義.
  www.2cto.com  
轉換集合
 
把普通的集合轉換成固定集合需要使用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不產生磁盤碎片
  www.2cto.com  
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中的內容  www.2cto.com  
 
db.fs.files.find();
 
fs.files 中存儲的是一些基礎的元數據信息.
 
db.fs.chunks.find();
 
fs.chunks 中存儲的是一些實際的內容數據信息.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章