創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
崇川ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!小編給大家分享一下關(guān)于mongodb面試一般會(huì)問(wèn)什么,相信大部分人都還不怎么了解,因此分享這邊文章給大家學(xué)習(xí),希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學(xué)習(xí)方法吧!
1.什么是NoSQL數(shù)據(jù)庫(kù)?NoSQL和RDBMS有什么區(qū)別?在哪些情況下使用和不使用NoSQL數(shù)據(jù)庫(kù)?
NoSQL是非關(guān)系型數(shù)據(jù)庫(kù),NoSQL = Not Only SQL。
關(guān)系型數(shù)據(jù)庫(kù)采用的結(jié)構(gòu)化的數(shù)據(jù),NoSQL采用的是鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù)。
在處理非結(jié)構(gòu)化/半結(jié)構(gòu)化的大數(shù)據(jù)時(shí);在水平方向上進(jìn)行擴(kuò)展時(shí);隨時(shí)應(yīng)對(duì)動(dòng)態(tài)增加的數(shù)據(jù)項(xiàng)時(shí)可以優(yōu)先考慮使用NoSQL數(shù)據(jù)庫(kù)。
在考慮數(shù)據(jù)庫(kù)的成熟度;支持;分析和商業(yè)智能;管理及專業(yè)性等問(wèn)題時(shí),應(yīng)優(yōu)先考慮關(guān)系型數(shù)據(jù)庫(kù)。
2.非關(guān)系型數(shù)據(jù)庫(kù)有哪些?
Membase、MongoDB、Hypertable
3.MySQL和MongoDB之間最基本的區(qū)別是什么?
關(guān)系型數(shù)據(jù)庫(kù)與非關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別,即數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的不同。
4.MongoDB的特點(diǎn)是什么?
(1)面向文檔(2)高性能(3)高可用(4)易擴(kuò)展(5)豐富的查詢語(yǔ)言
5. MongoDB支持存儲(chǔ)過(guò)程嗎?如果支持的話,怎么用?
MongoDB支持存儲(chǔ)過(guò)程,它是javascript寫的,保存在db.system.js表中。
6.如何理解MongoDB中的GridFS機(jī)制,MongoDB為何使用GridFS來(lái)存儲(chǔ)文件?
GridFS是一種將大型文件存儲(chǔ)在MongoDB中的文件規(guī)范。使用GridFS可以將大文件分隔成多個(gè)小文檔存放,這樣我們能夠有效的保存大文檔,而且解決了BSON對(duì)象有限制的問(wèn)題。
7.為什么MongoDB的數(shù)據(jù)文件很大?
MongoDB采用的預(yù)分配空間的方式來(lái)防止文件碎片。
8.當(dāng)更新一個(gè)正在被遷移的塊(Chunk)上的文檔時(shí)會(huì)發(fā)生什么?
更新操作會(huì)立即發(fā)生在舊的塊(Chunk)上,然后更改才會(huì)在所有權(quán)轉(zhuǎn)移前復(fù)制到新的分片上。
9.MongoDB在A:{B,C}上建立索引,查詢A:{B,C}和A:{C,B}都會(huì)使用索引嗎?
不會(huì),只會(huì)在A:{B,C}上使用索引。
10.如果一個(gè)分片(Shard)停止或很慢的時(shí)候,發(fā)起一個(gè)查詢會(huì)怎樣?
如果一個(gè)分片停止了,除非查詢?cè)O(shè)置了“Partial”選項(xiàng),否則查詢會(huì)返回一個(gè)錯(cuò)誤。如果一個(gè)分片響應(yīng)很慢,MongoDB會(huì)等待它的響應(yīng)。
2. nosql數(shù)據(jù)庫(kù)有哪些類型?
例如:mongodb, cassandra, couchdb, hypertable, redis, riak, neo4j, hbase, couchbase, memcachedb, revendb and voldemort are the examples of nosql databases. .
3. mysql與mongodb之間最基本的差別是什么?
mysql和mongodb兩者都是免費(fèi)開(kāi)源的數(shù)據(jù)庫(kù).mysql和mongodb有許多基本差別包括數(shù)據(jù)的表示(data representation),查詢,關(guān)系,事務(wù),schema的設(shè)計(jì)和定義,標(biāo)準(zhǔn)化(normalization),速度和性能.通過(guò)比較mysql和mongodb,實(shí)際上我們是在比較關(guān)系型和非關(guān)系型數(shù)據(jù)庫(kù).
4. 你怎么比較mongodb、couchdb及couchbase?
mongodb和couchdb都是面向文檔的數(shù)據(jù)庫(kù).mongodb和couchdb都是開(kāi)源nosql數(shù)據(jù)庫(kù)的最典型代表. 除了都以文檔形式存儲(chǔ)外它們沒(méi)有其他的共同點(diǎn).mongodb和couchdb在數(shù)據(jù)模型實(shí)現(xiàn)、接口、對(duì)象存儲(chǔ)以及復(fù)制方法等方面有很多不同.
細(xì)節(jié)可以參見(jiàn)下面的鏈接:
5. mongodb成為最好nosql數(shù)據(jù)庫(kù)的原因是什么?
以下特點(diǎn)使得mongodb成為最好的nosql數(shù)據(jù)庫(kù):
面向文件的 高性能 高可用性 易擴(kuò)展性 豐富的查詢語(yǔ)言
6. 32位系統(tǒng)上有什么細(xì)微差別?
journaling會(huì)激活額外的內(nèi)存映射文件.這將進(jìn)一步抑制32位版本上的數(shù)據(jù)庫(kù)大小.因此,現(xiàn)在journaling在32位系統(tǒng)上默認(rèn)是禁用的.
7. journal回放在條目(entry)不完整時(shí)(比如恰巧有一個(gè)中途故障了)會(huì)遇到問(wèn)題嗎?
每個(gè)journal (group)的寫操作都是一致的,除非它是完整的否則在恢復(fù)過(guò)程中它不會(huì)回放.
8. 分析器在mongodb中的作用是什么?
mongodb中包括了一個(gè)可以顯示數(shù)據(jù)庫(kù)中每個(gè)操作性能特點(diǎn)的數(shù)據(jù)庫(kù)分析器.通過(guò)這個(gè)分析器你可以找到比預(yù)期慢的查詢(或?qū)懖僮?;利用這一信息,比如,可以確定是否需要添加索引.
9. 名字空間(namespace)是什么?
mongodb存儲(chǔ)bson對(duì)象在叢集(collection)中.數(shù)據(jù)庫(kù)名字和叢集名字以句點(diǎn)連結(jié)起來(lái)叫做名字空間(namespace).
10. 如果用戶移除對(duì)象的屬性,該屬性是否從存儲(chǔ)層中刪除?
是的,用戶移除屬性然后對(duì)象會(huì)重新保存(re-save()).
11. 能否使用日志特征進(jìn)行安全備份?
是的.
12. 允許空值null嗎?
對(duì)于對(duì)象成員而言,是的.然而用戶不能夠添加空值(null)到數(shù)據(jù)庫(kù)叢集(collection)因?yàn)榭罩挡皇菍?duì)象.然而用戶能夠添加空對(duì)象{}.
13. 更新操作立刻fsync到磁盤?
不會(huì),磁盤寫操作默認(rèn)是延遲執(zhí)行的.寫操作可能在兩三秒(默認(rèn)在60秒內(nèi))后到達(dá)磁盤.例如,如果一秒內(nèi)數(shù)據(jù)庫(kù)收到一千個(gè)對(duì)一個(gè)對(duì)象遞增的操作,僅刷新磁盤一次.(注意,盡管fsync選項(xiàng)在命令行和經(jīng)過(guò)getlasterror_old是有效的)(譯者:也許是坑人的面試題??).
14. 如何執(zhí)行事務(wù)/加鎖?
mongodb沒(méi)有使用傳統(tǒng)的鎖或者復(fù)雜的帶回滾的事務(wù),因?yàn)樗O(shè)計(jì)的宗旨是輕量,快速以及可預(yù)計(jì)的高性能.可以把它類比成mysql mylsam的自動(dòng)提交模式.通過(guò)精簡(jiǎn)對(duì)事務(wù)的支持,性能得到了提升,特別是在一個(gè)可能會(huì)穿過(guò)多個(gè)服務(wù)器的系統(tǒng)里.
15. 為什么我的數(shù)據(jù)文件如此龐大?
mongodb會(huì)積極的預(yù)分配預(yù)留空間來(lái)防止文件系統(tǒng)碎片.
16. 啟用備份故障恢復(fù)需要多久?
從備份數(shù)據(jù)庫(kù)聲明主數(shù)據(jù)庫(kù)宕機(jī)到選出一個(gè)備份數(shù)據(jù)庫(kù)作為新的主數(shù)據(jù)庫(kù)將花費(fèi)10到30秒時(shí)間.這期間在主數(shù)據(jù)庫(kù)上的操作將會(huì)失敗–包括寫入和強(qiáng)一致性讀取(strong consistent read)操作.然而,你還能在第二數(shù)據(jù)庫(kù)上執(zhí)行最終一致性查詢(eventually consistent query)(在slaveok模式下),即使在這段時(shí)間里.
17. 什么是master或primary?
它是當(dāng)前備份集群(replica set)中負(fù)責(zé)處理所有寫入操作的主要節(jié)點(diǎn)/成員.在一個(gè)備份集群中,當(dāng)失效備援(failover)事件發(fā)生時(shí),一個(gè)另外的成員會(huì)變成primary.
18. 什么是secondary或slave?
seconday從當(dāng)前的primary上復(fù)制相應(yīng)的操作.它是通過(guò)跟蹤復(fù)制oplog(local.oplog.rs)做到的.
19. 我必須調(diào)用getlasterror來(lái)確保寫操作生效了么?
不用.不管你有沒(méi)有調(diào)用getlasterror(又叫”safe mode”)服務(wù)器做的操作都一樣.調(diào)用getlasterror只是為了確認(rèn)寫操作成功提交了.當(dāng)然,你經(jīng)常想得到確認(rèn),但是寫操作的安全性和是否生效不是由這個(gè)決定的.
20. 我應(yīng)該啟動(dòng)一個(gè)集群分片(sharded)還是一個(gè)非集群分片的 mongodb 環(huán)境?
為開(kāi)發(fā)便捷起見(jiàn),我們建議以非集群分片(unsharded)方式開(kāi)始一個(gè) mongodb 環(huán)境,除非一臺(tái)服務(wù)器不足以存放你的初始數(shù)據(jù)集.從非集群分片升級(jí)到集群分片(sharding)是無(wú)縫的,所以在你的數(shù)據(jù)集還不是很大的時(shí)候沒(méi)必要考慮集群分片(sharding).
21. 分片(sharding)和復(fù)制(replication)是怎樣工作的?
每一個(gè)分片(shard)是一個(gè)分區(qū)數(shù)據(jù)的邏輯集合.分片可能由單一服務(wù)器或者集群組成,我們推薦為每一個(gè)分片(shard)使用集群.
22. 數(shù)據(jù)在什么時(shí)候才會(huì)擴(kuò)展到多個(gè)分片(shard)里?
mongodb 分片是基于區(qū)域(range)的.所以一個(gè)集合(collection)中的所有的對(duì)象都被存放到一個(gè)塊(chunk)中.只有當(dāng)存在多余一個(gè)塊的時(shí)候,才會(huì)有多個(gè)分片獲取數(shù)據(jù)的選項(xiàng).現(xiàn)在,每個(gè)默認(rèn)塊的大小是 64mb,所以你需要至少 64 mb 空間才可以實(shí)施一個(gè)遷移.
23. 當(dāng)我試圖更新一個(gè)正在被遷移的塊(chunk)上的文檔時(shí)會(huì)發(fā)生什么?
更新操作會(huì)立即發(fā)生在舊的分片(shard)上,然后更改才會(huì)在所有權(quán)轉(zhuǎn)移(ownership transfers)前復(fù)制到新的分片上.
24. 如果在一個(gè)分片(shard)停止或者很慢的時(shí)候,我發(fā)起一個(gè)查詢會(huì)怎樣?
如果一個(gè)分片(shard)停止了,除非查詢?cè)O(shè)置了“partial”選項(xiàng),否則查詢會(huì)返回一個(gè)錯(cuò)誤.如果一個(gè)分片(shard)響應(yīng)很慢,mongodb則會(huì)等待它的響應(yīng).
25. 我可以把movechunk目錄里的舊文件刪除嗎?
沒(méi)問(wèn)題,這些文件是在分片(shard)進(jìn)行均衡操作(balancing)的時(shí)候產(chǎn)生的臨時(shí)文件.一旦這些操作已經(jīng)完成,相關(guān)的臨時(shí)文件也應(yīng)該被刪除掉.但目前清理工作是需要手動(dòng)的,所以請(qǐng)小心地考慮再釋放這些文件的空間.
26. 我怎么查看 mongo 正在使用的鏈接?
db._admincommand(“connpoolstats”);
27. 如果塊移動(dòng)操作(movechunk)失敗了,我需要手動(dòng)清除部分轉(zhuǎn)移的文檔嗎?
不需要,移動(dòng)操作是一致(consistent)并且是確定性的(deterministic);一次失敗后,移動(dòng)操作會(huì)不斷重試;當(dāng)完成后,數(shù)據(jù)只會(huì)出現(xiàn)在新的分片里(shard).
28. 如果我在使用復(fù)制技術(shù)(replication),可以一部分使用日志(journaling)而其他部分則不使用嗎?
可以.
以上是關(guān)于mongodb面試一般會(huì)問(wèn)什么的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!