Mongodb知識點

1.什麼是NOSQL?

NoSQL,指的是非關係型的數據庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同於傳統的關係型數據庫(RDBMS)的數據庫管理系統的統稱。NoSQL用於超大規模數據的存儲。

2.什麼是MongoDB?MongoDB與MySQL的區別?

MongoDB是一個基於分佈式文件存儲的開源數據庫系統。將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。

MongoDB與MySQL的區別主要就是非關係型數據庫與關係型數據庫的區別,這篇文章介紹得比較詳細:https://blog.csdn.net/gjc_csdn/article/details/80419997

3.關於副本集中的仲裁節點?

仲裁節點的職責就是是負責選舉主節點,注意仲裁節點中不會存放數據。

有一種情況,當一個副本集中只有一個主節點和一個備用節點時,必須再添加一個仲裁節點,否則當主節點掛掉後,備用節點不會主動升級成爲主節點。

另一種情況,當一個副本集中有一個主節點並且有兩個以上的備用節點時,當主節點掛掉,無論該副本集中有沒有仲裁節點,此時也會從備用節點中選取一個升級作爲主節點。但是當只剩一個備用節點活着時,此時無論有沒有仲裁節點,這個備用節點也不會升級成爲主節點。

4.關於分片的問題?

配置服務器副本集,需要3個節點,雖然官方說可以設置1個或3個,但是經過測試,配置服務器副本集只設置一個節點時,無法使用mongos命令鏈接路由服務器。配置服務器副本集中的3個節點中不能設置仲裁節點否則在報錯(Arbiters are not allowed in replica set configurations being used for config servers)。

5.MongoDB的主要特點?以及使用場景。

特點:1)面向文檔存儲的數據庫 2)可以在任何屬性上設置索引 3)支持多種編程語言 4)當負載增加時可以利用分片 5)提供副本集支持數據庫複製 6)數據是鍵值對的數據結構

使用場景:

1)網站數據:Mongo非常適合實時的插入,更新與查詢,並具備網站實時數據存儲所需的複製及高度伸縮性。
2)緩存:由於性能很高,Mongo也適合作爲信息基礎設施的緩存層。
3)大尺寸,低價值的數據:使用傳統的關係型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇4)傳統的文件進行存儲。
高伸縮性的場景:Mongo非常適合由數十或數百臺服務器組成的數據庫。Mongo的路線圖中已經包含對MapReduce引擎的內置支持。
5)用於對象及JSON數據的存儲:Mongo的BSON數據格式非常適合文檔化格式的存儲及查詢。

缺點:

1)因爲MongoDB直接把索引放在內存中,因此理論上講對於內存有一定的需求。

2) 因爲沒有恢復機制,因此要做好數據備份,建好副本集。

3 )因爲默認監聽地址是127.0.0.1,因此要進行身份驗證,否則不夠安全

6.MongoDB中存儲數據的結構?

MongoDB中存儲的對象時BSON,是一種類似JSON的二進制文件,它是由許多的鍵值對組成。

7.MongoDB的命名規則

1)“\0″不能使用

2)帶有”.”號,”_”號和”$”號前綴的Key被保留

3)大小寫有區別,Age不同於age

4)同一個文檔不能有相同的Key

8.MongoDB在32位和64位系統上有什麼細微差別?

journaling(日誌)會激活額外的內存映射文件。這將進一步抑制32位版本上的數據庫大小。因此,現在journaling在32位系統上默認是禁用的

9. journal回放在條目(entry)不完整時(比如恰巧有一箇中途故障了)會遇到問題嗎?

每個journal (group)的寫操作都是一致的,除非它是完整的否則在恢復過程中它不會回放。

10.分析器在MongoDB中的作用是什麼?

分析器就是explain 顯示每次操作性能特點的數據庫分析器。通過分析器可能查找比預期慢的操作。

11.命名空間(namespace)是什麼?

在collection中,數據庫名+集合名叫做名字空間。也就是一個集合的完整名。

12.如何執行事務/加鎖?

因爲mongodb設計就是輕量高性能,所以沒有傳統的鎖和複雜的事務的回滾。

13.什麼節點是副本集中的primary也叫master?什麼是secondary或slave?

副本集中負責寫入操作的節點我們稱爲主節點primary,當主節點掛掉後,另一個副節點secondary會轉爲主節點。

14.分片(sharding)和複製(replication)是怎樣工作的?

分片可能是單一的服務器或者集羣組成,推薦使用集羣

15. 數據庫的整體結構

鍵值對–>文檔–>集合–>數據庫

16. 當我試圖更新一個正在被遷移的塊(chunk)上的文檔時會發生什麼?

更新操作會立即發生在舊的分片(shard)上,然後更改纔會在所有權轉移(ownership transfers)前複製到新的分片上。

17.允許空值null嗎?

用戶不能夠添加空值(null)到數據庫叢集(collection)因爲空值不是對象。然而用戶能夠添加空對象{}。

18.更新操作立刻fsync到磁盤?

不會,磁盤寫操作默認是延遲執行的。寫操作可能在兩三秒(默認在60秒內)後到達磁盤。例如,如果一秒內數據庫收到一千個對一個對象遞增的操作,僅刷新磁盤一次。

19.爲什麼我的數據文件如此龐大?

MongoDB會積極的預分配預留空間來防止文件系統碎片。

20.啓用備份故障恢復需要多久?

從備份數據庫聲明主數據庫宕機到選出一個備份數據庫作爲新的主數據庫將花費10到30秒時間。這期間在主數據庫上的操作將會失敗--包括寫入和強一致性讀取(strong consistent read)操作。然而,你還能在第二數據庫上執行最終一致性查詢(eventually consistent query)(在slaveOk模式下),即使在這段時間裏。

21.我應該啓動一個集羣分片(sharded)還是一個非集羣分片的 MongoDB 環境?

爲開發便捷起見,我們建議以非集羣分片(unsharded)方式開始一個 MongoDB 環境,除非一臺服務器不足以存放你的初始數據集。從非集羣分片升級到集羣分片(sharding)是無縫的,所以在你的數據集還不是很大的時候沒必要考慮集羣分片(sharding)。

22.數據在什麼時候纔會擴展到多個分片(shard)裏?

MongoDB 分片是基於區域(range)的。所以一個集合(collection)中的所有的對象都被存放到一個塊(chunk)中。只有當存在多餘一個塊的時候,纔會有多個分片獲取數據的選項。現在,每個默認塊的大小是 64Mb,所以你需要至少 64 Mb 空間纔可以實施一個遷移。

23. 如果在一個分片(shard)停止或者很慢的時候,我發起一個查詢會怎樣?

如果一個分片(shard)停止了,除非查詢設置了“Partial”選項,否則查詢會返回一個錯誤。如果一個分片(shard)響應很慢,MongoDB則會等待它的響應。

24.MongoDB支持存儲過程嗎?如果支持的話,怎麼用?

MongoDB支持存儲過程,它是javascript寫的,保存在db.system.js表中。

25.如果我在使用複製技術(replication),可以一部分使用日誌(journaling)而其他部分則不使用嗎?

可以。

26. 我可以把moveChunk目錄裏的舊文件刪除嗎?

沒問題,這些文件是在分片(shard)進行均衡操作(balancing)的時候產生的臨時文件。一旦這些操作已經完成,相關的臨時文件也應該被刪除掉。但目前清理工作是需要手動的,所以請小心地考慮再釋放這些文件的空間。

27. 分片(sharding)和複製(replication)是怎樣工作的?

每一個分片(shard)是一個分區數據的邏輯集合。分片可能由單一服務器或者集羣組成,我們推薦爲每一個分片(shard)使用集羣。

常見的問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章