1. 程式人生 > >mongoDb固定集合與效能優化

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

此工具是實時動態監視的,需要開啟另一個客戶端進行命令操作

此工具會將這些操作資料記錄輸出到一個日誌檔案中