mongoDb固定集合與效能最佳化

來源:互聯網
上載者:User

固定集合:

屬性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

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

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








相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.