欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

28個MongoDB經(jīng)典面試題詳解

 更新時間:2020年02月09日 15:28:40   作者:羅阿紅  
這篇文章主要介紹了28個MongoDB經(jīng)典面試題詳解,需要的朋友可以參考下

MongoDB是目前最好的面向文檔的免費(fèi)開源NoSQL數(shù)據(jù)庫。

如果你正準(zhǔn)備參加MongoDB NoSQL數(shù)據(jù)庫的技術(shù)面試,你最好看看下面的MongoDB NoSQL面試問答。

這些MongoDB NoSQL面試問答涵蓋了NoSQL數(shù)據(jù)庫基本的概念,復(fù)制(Replication),分片(Sharding),事務(wù)和鎖,跟蹤分析工具(Profiler),Nuances和日志等特性。

讓我們看看下面的這些MongoDB NoSQL數(shù)據(jù)庫的面試問答吧:

1. 你說的NoSQL數(shù)據(jù)庫是什么意思?NoSQL與RDBMS直接有什么區(qū)別?為什么要使用和不使用NoSQL數(shù)據(jù)庫?說一說NoSQL數(shù)據(jù)庫的幾個優(yōu)點(diǎn)?

NoSQL是非關(guān)系型數(shù)據(jù)庫,NoSQL = Not Only SQL。

關(guān)系型數(shù)據(jù)庫采用的結(jié)構(gòu)化的數(shù)據(jù),NoSQL采用的是鍵值對的方式存儲數(shù)據(jù)。

在處理非結(jié)構(gòu)化/半結(jié)構(gòu)化的大數(shù)據(jù)時;在水平方向上進(jìn)行擴(kuò)展時;隨時應(yīng)對動態(tài)增加的數(shù)據(jù)項(xiàng)時可以優(yōu)先考慮使用NoSQL數(shù)據(jù)庫。

在考慮數(shù)據(jù)庫的成熟度;支持;分析和商業(yè)智能;管理及專業(yè)性等問題時,應(yīng)優(yōu)先考慮關(guān)系型數(shù)據(jù)庫。

2. NoSQL數(shù)據(jù)庫有哪些類型?

NoSQL數(shù)據(jù)庫的類型

例如:MongoDB, Cassandra, CouchDB, Hypertable, Redis, Riak, Neo4j, HBASE, Couchbase, MemcacheDB, RevenDB and Voldemort are the examples of NoSQL databases.詳細(xì)閱讀。

3. MySQL與MongoDB之間最基本的差別是什么?

MySQL和MongoDB兩者都是免費(fèi)開源的數(shù)據(jù)庫。MySQL和MongoDB有許多基本差別包括數(shù)據(jù)的表示(data representation),查詢,關(guān)系,事務(wù),schema的設(shè)計(jì)和定義,標(biāo)準(zhǔn)化(normalization),速度和性能。

通過比較MySQL和MongoDB,實(shí)際上我們是在比較關(guān)系型和非關(guān)系型數(shù)據(jù)庫,即數(shù)據(jù)存儲結(jié)構(gòu)不同。詳細(xì)閱讀

4. 你怎么比較MongoDB、CouchDB及CouchBase?

MongoDB和CouchDB都是面向文檔的數(shù)據(jù)庫。MongoDB和CouchDB都是開源NoSQL數(shù)據(jù)庫的最典型代表。 除了都以文檔形式存儲外它們沒有其他的共同點(diǎn)。MongoDB和CouchDB在數(shù)據(jù)模型實(shí)現(xiàn)、接口、對象存儲以及復(fù)制方法等方面有很多不同。

細(xì)節(jié)可以參見下面的鏈接:

MongDB vs CouchDB

CouchDB vs CouchBase

5. MongoDB成為最好NoSQL數(shù)據(jù)庫的原因是什么?

以下特點(diǎn)使得MongoDB成為最好的NoSQL數(shù)據(jù)庫:

  • 面向文件的
  • 高性能
  • 高可用性
  • 易擴(kuò)展性
  • 豐富的查詢語言

6.32位系統(tǒng)上有什么細(xì)微差別?

journaling會激活額外的內(nèi)存映射文件。這將進(jìn)一步抑制32位版本上的數(shù)據(jù)庫大小。因此,現(xiàn)在journaling在32位系統(tǒng)上默認(rèn)是禁用的。

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

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

8. 分析器在MongoDB中的作用是什么?

MongoDB中包括了一個可以顯示數(shù)據(jù)庫中每個操作性能特點(diǎn)的數(shù)據(jù)庫分析器。通過這個分析器你可以找到比預(yù)期慢的查詢(或?qū)懖僮?;利用這一信息,比如,可以確定是否需要添加索引。

9. 名字空間(namespace)是什么?

MongoDB存儲BSON對象在叢集(collection)中。數(shù)據(jù)庫名字和叢集名字以句點(diǎn)連結(jié)起來叫做名字空間(namespace)。

10. 如果用戶移除對象的屬性,該屬性是否從存儲層中刪除?

是的,用戶移除屬性然后對象會重新保存(re-save())。

11. 能否使用日志特征進(jìn)行安全備份?

是的。

12. 允許空值null嗎?

對于對象成員而言,是的。然而用戶不能夠添加空值(null)到數(shù)據(jù)庫叢集(collection)因?yàn)榭罩挡皇菍ο蟆H欢脩裟軌蛱砑涌諏ο髙}。

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

不會,磁盤寫操作默認(rèn)是延遲執(zhí)行的。寫操作可能在兩三秒(默認(rèn)在60秒內(nèi))后到達(dá)磁盤。例如,如果一秒內(nèi)數(shù)據(jù)庫收到一千個對一個對象遞增的操作,僅刷新磁盤一次。(注意,盡管fsync選項(xiàng)在命令行和經(jīng)過getLastError_old是有效的)(譯者:也許是坑人的面試題??)。

14. 如何執(zhí)行事務(wù)/加鎖?

MongoDB沒有使用傳統(tǒng)的鎖或者復(fù)雜的帶回滾的事務(wù),因?yàn)樗O(shè)計(jì)的宗旨是輕量,快速以及可預(yù)計(jì)的高性能??梢园阉惐瘸蒑ySQL MylSAM的自動提交模式。通過精簡對事務(wù)的支持,性能得到了提升,特別是在一個可能會穿過多個服務(wù)器的系統(tǒng)里。

15. 為什么我的數(shù)據(jù)文件如此龐大?

MongoDB會積極的預(yù)分配預(yù)留空間來防止文件系統(tǒng)碎片。

16. 啟用備份故障恢復(fù)需要多久?

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

17. 什么是master或primary?

它是當(dāng)前備份集群(replica set)中負(fù)責(zé)處理所有寫入操作的主要節(jié)點(diǎn)/成員。在一個備份集群中,當(dāng)失效備援(failover)事件發(fā)生時,一個另外的成員會變成primary。

18. 什么是secondary或slave?

Seconday從當(dāng)前的primary上復(fù)制相應(yīng)的操作。它是通過跟蹤復(fù)制oplog(local.oplog.rs)做到的。

19. 我必須調(diào)用getLastError來確保寫操作生效了么?

不用。不管你有沒有調(diào)用getLastError(又叫"Safe Mode")服務(wù)器做的操作都一樣。調(diào)用getLastError只是為了確認(rèn)寫操作成功提交了。當(dāng)然,你經(jīng)常想得到確認(rèn),但是寫操作的安全性和是否生效不是由這個決定的。

20. 我應(yīng)該啟動一個集群分片(sharded)還是一個非集群分片的 MongoDB 環(huán)境?

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

21. 分片(sharding)和復(fù)制(replication)是怎樣工作的?

每一個分片(shard)是一個分區(qū)數(shù)據(jù)的邏輯集合。分片可能由單一服務(wù)器或者集群組成,我們推薦為每一個分片(shard)使用集群。

22. 數(shù)據(jù)在什么時候才會擴(kuò)展到多個分片(shard)里?

MongoDB 分片是基于區(qū)域(range)的。所以一個集合(collection)中的所有的對象都被存放到一個塊(chunk)中。只有當(dāng)存在多余一個塊的時候,才會有多個分片獲取數(shù)據(jù)的選項(xiàng)。現(xiàn)在,每個默認(rèn)塊的大小是 64Mb,所以你需要至少 64 Mb 空間才可以實(shí)施一個遷移。

23. 當(dāng)我試圖更新一個正在被遷移的塊(chunk)上的文檔時會發(fā)生什么?

更新操作會立即發(fā)生在舊的分片(shard)上,然后更改才會在所有權(quán)轉(zhuǎn)移(ownership transfers)前復(fù)制到新的分片上。

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

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

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

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

26. 我怎么查看 Mongo 正在使用的鏈接?

db._adminCommand("connPoolStats");

27. 如果塊移動操作(moveChunk)失敗了,我需要手動清除部分轉(zhuǎn)移的文檔嗎?

不需要,移動操作是一致(consistent)并且是確定性的(deterministic);一次失敗后,移動操作會不斷重試;當(dāng)完成后,數(shù)據(jù)只會出現(xiàn)在新的分片里(shard)。

28. 如果我在使用復(fù)制技術(shù)(replication),可以一部分使用日志(journaling)而其他部分則不使用嗎?

可以。

29.當(dāng)更新一個正在被遷移的塊(Chunk)上的文檔時會發(fā)生什么?

更新操作會立即發(fā)生在舊的塊(Chunk)上,然后更改才會在所有權(quán)轉(zhuǎn)移前復(fù)制到新的分片上。

30.MongoDB在A:{B,C}上建立索引,查詢A:{B,C}和A:{C,B}都會使用索引嗎?

不會,只會在A:{B,C}上使用索引。

31.如果一個分片(Shard)停止或很慢的時候,發(fā)起一個查詢會怎樣?

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

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

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

33.如何理解MongoDB中的GridFS機(jī)制,MongoDB為何使用GridFS來存儲文件?

GridFS是一種將大型文件存儲在MongoDB中的文件規(guī)范。使用GridFS可以將大文件分隔成多個小文檔存放,這樣我們能夠有效的保存大文檔,而且解決了BSON對象有限制的問題。

更多關(guān)于MongoDB經(jīng)典面試題請查看下面的相關(guān)鏈接

相關(guān)文章

  • MongoDB在系統(tǒng)數(shù)據(jù)庫local中無法創(chuàng)建用戶的解決辦法

    MongoDB在系統(tǒng)數(shù)據(jù)庫local中無法創(chuàng)建用戶的解決辦法

    這篇文章主要給大家介紹了關(guān)于MongoDB在系統(tǒng)數(shù)據(jù)庫local中無法創(chuàng)建用戶的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • mongoDB 實(shí)現(xiàn)主從讀寫分離實(shí)現(xiàn)的實(shí)例代碼

    mongoDB 實(shí)現(xiàn)主從讀寫分離實(shí)現(xiàn)的實(shí)例代碼

    這篇文章主要介紹了 mongoDB 實(shí)現(xiàn)主從讀寫分離實(shí)現(xiàn)的實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • MongoDB 主從復(fù)制實(shí)例講解

    MongoDB 主從復(fù)制實(shí)例講解

    這篇文章主要介紹了MongoDB 主從復(fù)制實(shí)例講解,主從復(fù)制可以用來數(shù)據(jù)庫備份,故障恢復(fù),讀寫分離,有興趣的小伙伴可以參考下本文
    2016-10-10
  • MongoDB聚合運(yùn)算符$divide詳解

    MongoDB聚合運(yùn)算符$divide詳解

    $divide聚合運(yùn)算符返回兩個表達(dá)式相除的結(jié)果,參數(shù)通過數(shù)組傳遞給$divide運(yùn)算符,這篇文章介紹了MongoDB聚合運(yùn)算符$divide的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 詳解mongodb 主從配置

    詳解mongodb 主從配置

    我研究過的nosql,memcache,redis,mongodb都是支持分布式的,生產(chǎn)環(huán)境中用過memcache,redis,性能穩(wěn)定。mongodb是最接近關(guān)系型數(shù)據(jù)庫的,不用花很多時間去構(gòu)建數(shù)據(jù)庫模型,將來我會用mongodb,看一下主從配置
    2014-07-07
  • mongoDB在windows下安裝與配置方案

    mongoDB在windows下安裝與配置方案

    本文詳細(xì)介紹了在windows系統(tǒng)下安裝與配置mongoDB的詳細(xì)過程,非常的全面,有需要的小伙伴自己參考下吧
    2014-12-12
  • mongodb數(shù)據(jù)庫入門之CURD簡單操作示例

    mongodb數(shù)據(jù)庫入門之CURD簡單操作示例

    這篇文章主要介紹了mongodb數(shù)據(jù)庫入門之CURD簡單操作,結(jié)合簡單示例形式分析了MongoDB數(shù)據(jù)庫基本的CURD增刪改查相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • MongoDB CRUD操作中的插入實(shí)例教程

    MongoDB CRUD操作中的插入實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于MongoDB CRUD操作中的插入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • MongoDB磁盤空間占滿導(dǎo)致數(shù)據(jù)庫被鎖定的解決方法

    MongoDB磁盤空間占滿導(dǎo)致數(shù)據(jù)庫被鎖定的解決方法

    我在實(shí)際項(xiàng)目中,遇到一個問題,隨著數(shù)據(jù)每天的不斷增加,導(dǎo)致mongodb的磁盤空間站滿了,數(shù)據(jù)庫被鎖了,無法使用,所以本文給大家介紹了清理MongoDB數(shù)據(jù)和磁盤空間的方法,需要的朋友可以參考下
    2024-04-04
  • Windows系統(tǒng)啟動MongoDB報(bào)錯無法連接服務(wù)器的問題及解決方案

    Windows系統(tǒng)啟動MongoDB報(bào)錯無法連接服務(wù)器的問題及解決方案

    在Windows系統(tǒng)中啟動MongoDB時遇到連接拒絕的錯誤,通常是因?yàn)榉?wù)未運(yùn)行或配置問題,本文給大家分享Windows系統(tǒng)啟動MongoDB報(bào)錯無法連接服務(wù)器的問題及解決方案,一起看看吧
    2024-10-10

最新評論