你們好,我是Java最全面試題庫
的提褲姐,今天這篇是數據庫面試題系列的第六篇,主要總結了MongoDB
相關的面試題;在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更,但願你也能夠跟着百日百刷,一百天養成一個好習慣。mysql
MongoDB是一個文檔數據庫,提供好的性能,領先的非關係型數據庫。採用BSON
存儲文檔數據。 BSON()是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON. 相對於json多了date類型和二進制數組。面試
關係型數據庫
優勢:算法
缺點:sql
非關係型數據庫
優勢:mongodb
缺點:數據庫
mongodb存儲bson對象在叢集(collection)中。數據庫名字和叢集名字以句點連結起來叫作名字空間(namespace)。
一個集合命名空間又有多個數據域(extent),集合命名空間裏存儲着集合的元數據,好比集合名稱,集合的 第一個數據域和最後一個數據域的位置等等。而一個數據域由若干條文檔(document)組成,每一個數據域都有一個 頭部,記錄着第一條文檔和最後一條文檔的爲知,以及該數據域的一些元數據。extent之間,document之間經過 雙向鏈表鏈接。 索引的存儲數據結構是B樹,索引命名空間存儲着對B樹的根節點的指針。json
Mongodb沒有使用傳統的鎖或者複雜的帶回滾的事務,由於他設計的宗旨是輕量級,快速以及可預計的高性能,可能把它類比成mysql myisam的自動提交模式
,經過精簡對事務的支持,性能獲得了提高,特別是在一個可能會穿過多個服務器的系統裏。數組
不會,磁盤寫操做默認是延遲執行的,寫操做可能在量三秒後到達磁盤,例如,若是一秒內數據庫收到一千個對一個對象遞增的操做,僅刷新磁盤一次。安全
一、索引頗有用,可是它也是有成本的;它佔內存,讓寫入變慢
;
二、mongoDB一般在一次查詢裏使用一個索引,因此多個字段的查詢或者排序須要複合索引才能更加高效;
三、複合索引的順序很是重要
四、在生成環境構建索引每每開銷很大,時間也不能夠接受,在數據量龐大以前儘可能進行查詢優化和構建索引;
五、避免昂貴的查詢,使用查詢分析器記錄那些開銷很大的查詢便於問題排查;
六、經過減小掃描文檔數量來優化查詢,使用explain
對開銷大的查詢進行分析並優化;
七、索引是用來查詢小範圍數據的服務器
不適合使用索引的狀況:
MongoDB 的應用已經滲透到各個領域,好比遊戲、物流、電商、內容管理、社交、物聯網、視頻直播等,如下是幾個實際的應用案例:
遊戲場景
,使用 MongoDB 存儲遊戲用戶信息,用戶的裝備、積分等直接之內嵌文檔的形式存儲,方便查詢、更新物流場景
,使用 MongoDB 存儲訂單信息,訂單狀態在運送過程當中會不斷更新,以MongoDB 內嵌數組的形式來存儲,一次查詢就能將訂單全部的變動讀取出來。社交場景
,使用 MongoDB 存儲存儲用戶信息,以及用戶發表的朋友圈信息,經過地理位置索引實現附近的人、地點等功能物聯網場景
,使用 MongoDB 存儲全部接入的智能設備信息,以及設備彙報的日誌信息,並對這些信息進行多維度的分析視頻直播
,使用 MongoDB 存儲用戶信息、禮物信息等