mongoDb固定集合與效能優化
固定集合:
屬性1.對固定集合進行插入速度極快
屬性2:按照插入順序的查詢輸出速度極快
屬性3:能夠在插入最新資料時,淘汰最早的資料
用法1:儲存日誌資訊
用法2:快取一些少量的文件
建立固定集合
不像普通集合,固定集合需要顯式的建立使用createCollection命令來建立
db.createCollection("my_collection", {capped:true, size:10000})
建立一個集合為'my_collection"的固定集合,大小為10000位元組,還可以限定文件個數,加上Max:100屬性
注意:指定文件上限,必須指定大小。文件限制是在容量沒有滿時進行淘汰,要是滿了,就根據容量限制來進行淘汰。
轉換集合
把普通集合轉換成固定需要使用convertTocapped命令
db.renCommand({convertTocapped:"test", size:10000})
把test普通集合轉換為固定集合,大小為10000位元組
自然排序
固定集合文件按照插入順序儲存的,預設情況下查詢就是按照插入順序返回的,也可以使用$natural調整返回順序
db.my_collection.find().sort({"$natural":1})
判斷用db.test.isCapped();
顯示狀態:db.test.status();
GridFS
GridFS是一種在MongoDB中儲存大二進位制檔案的機制,使用GridFS的原因有以下幾種:
1.儲存巨大的檔案,比如視訊、高清圖片等
2.利用GridFS可以簡化需求
3.GridFS會直接利用已經建立的複製或分片機制,故障恢復和拓展都很容易
4.GridFS可以避免使用者上傳內容的檔案系統出現問題
5.GridFS不產生磁碟碎片
GridFS使用兩個表來儲存資料
file包含元資料物件
chunks包含其他一些相關資訊的二進位制塊
為了使多個GridFS命名為一個單一的資料庫,檔案盒塊都有一個字首,預設情況下,字首是fs,所以任何預設的GridFS儲存將包括名稱空間fs.files和fs.chunks。
各種第三方語言可以更改其字首
使用GridFS mongofiles命令
mongofiles是從命令列操作GridFS的一種工具
三個命令:put(儲存) get(取得) list(列表)
索引
MongoDB提供了多樣性的索引支援,索引資訊被儲存在system.indexes中,MongoDB中_id欄位在建立的時候,預設已經建立了索引,這個索引比較特殊,並且不可刪除,不過Capped Collections例外
建立索引
1.建立普通索引
建立普通索引函式:ensureIndex()
在name上建立索引,1表示升序,-1表示降序,預設為1
db.persons.ensureIndex({name:1});
當系統已有大量資料時,建立索引非常耗時,需在後臺執行,只需指定“backgroud:true"即可
db.persons.ensureIndex({name:1},{background:true});
2.建立唯一索引
只需在ensureIndex命令中指定"unique:true"即可建立唯一索引
db.test.ensureIndex({name:1}, {unique:true});
3.檢視索引命令:
db.test.getIndexes();
db.test.getIndexKeys();
4.刪除索引
刪除test表中所有索引
db.test.fropIndexes();
刪除test表中name索引
db.test.dropIndex({name:1});
分析sql語句的使用索引情況命令:
db.test.find().explain();
效能優化:
explain執行計劃
mongoDB提供了一個explain命令獲知系統如何處理查詢請求。利用explain命令可以很好的觀察系統如何使用索引來加快檢索,同時可以針對性優化索引
explain返回引數含義:
curser: 返回遊標型別(BasicCursor 或 BtreeCursor)
nscanned: 被掃描的文件數量
nscannedObjects
n: 返回的問的航數量
millis:耗時(毫秒)
indexBounds: 所使用的索引
優化器profile
MongoDB Database Porfiler是一種慢查詢日誌功能
開啟Profiling功能
有兩種方式可以控制Profiling的開關和級別
啟動MongoDB時加上--profile=級別即可
1.db.setProfilingLevel(2);
profile的級別可以取0,1,2:
0表示不開啟
1表示記錄慢命令(預設查詢時間為100ms)
2表示記錄所有命令
設定慢查詢時間
1.db.setProfilingLevel(1, 10);//第二個引數為慢查詢時間
2.通過新增--slowms啟動引數配置
效能監控:
Mongosniff
此工具可從底層監控到底有哪些命令傳送給MongoDB去執行
./mongosniff --source NET lo
此工具是實時動態監視的,需要開啟另一個客戶端進行命令操作
此工具會將這些操作資料記錄輸出到一個日誌檔案中