mongodb 默认端口号_快2020年了,该如何面对BATJM对MongoDB灵魂式的拷问呢?
關注我,可以獲取最新知識、經典面試題以及微服務技術分享
MongoDB是基于分布式文件存儲的數據庫,由C++語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案,且MongodDB是一個介于關系數據庫與非關系數據庫之間的產品,是非關系型數據庫中功能最豐富,最像關系數據庫。
由于MongoDB的特性以及功能,使得其在企業(yè)使用頻率很大,所以很多面試都會MongoDB的相關知識,基于網上以及自己閱讀官網文檔總結2019-2020年MongoDB的面試題。具體如下:
? 1Q:MongoDB的優(yōu)勢有哪些?
- 面向集合(Collection)和文檔(document)的存儲,以JSON格式的文檔保存數據。
- 高性能,支持Document中嵌入Document減少了數據庫系統(tǒng)上的I/O操作以及具有完整的索引支持,支持快速查詢
- 高效的傳統(tǒng)存儲方式:支持二進制數據及大型對象
- 高可用性,數據復制集,MongoDB 數據庫支持服務器之間的數據復制來提供自動故障轉移(automatic failover)
- 高可擴展性,分片(sharding)將數據分布在多個數據中心,MongoDB支持基于分片鍵創(chuàng)建數據區(qū)域.
- 豐富的查詢功能, 聚合管道(Aggregation Pipeline)、全文搜索(Text Search)以及地理空間查詢(Geospatial Queries)
- 支持多個存儲引擎,WiredTiger存儲引、In-Memory存儲引擎
? 2Q:MongoDB 支持哪些數據類型?
java類似數據類型:
MongoDB特有數據類型:
?3Q:什么是集合Collection、文檔Document,以及與關系型數據庫術語類比。
- 集合Collection位于單獨的一個數據庫MongoDB 文檔Document集合,它類似關系型數據庫(RDBMS)中的表Table。一個集合Collection內的多個文檔Document可以有多個不同的字段。通常情況下,集合Collection中的文檔Document有著相同含義。
- 文檔Document由key-value構成。文檔Document是動態(tài)模式,這說明同一集合里的文檔不需要有相同的字段和結構。類似于關系型數據庫中table中的每一條記錄。
- 與關系型數據庫術語類比
mongodb關系型數據庫
? 4Q:什么是”Mongod“,以及MongoDB命令。
mongod是處理MongoDB系統(tǒng)的主要進程。它處理數據請求,管理數據存儲,和執(zhí)行后臺管理操作。當我們運行mongod命令意味著正在啟動MongoDB進程,并且在后臺運行。
MongoDB命令:
? 5Q:"Mongod"默認參數有?
- 傳遞數據庫存儲路徑,默認是"/data/db"
- 端口號 默認是 "27017"
?6Q:MySQL和mongodb的區(qū)別
?7Q:問mongodb和redis區(qū)別以及選擇原因
選擇原因:
- 架構簡單
- 沒有復雜的連接
- 深度查詢能力,MongoDB支持動態(tài)查詢。
- 容易調試
- 容易擴展
- 不需要轉化/映射應用對象到數據庫對象
- 使用內部內存作為存儲工作區(qū),以便更快的存取數據。
8Q:如何執(zhí)行事務/加鎖?
mongodb沒有使用傳統(tǒng)的鎖或者復雜的帶回滾的事務,因為它設計的宗旨是輕量,快速以及可預計的高性能.可以把它類比成mysql mylsam的自動提交模式.通過精簡對事務的支持,性能得到了提升,特別是在一個可能會穿過多個服務器的系統(tǒng)里.
9Q:更新操作會立刻fsync到磁盤?
不會,磁盤寫操作默認是延遲執(zhí)行的.寫操作可能在兩三秒(默認在60秒內)后到達磁盤,通過 syncPeriodSecs 啟動參數,可以進行配置.例如,如果一秒內數據庫收到一千個對一個對象遞增的操作,僅刷新磁盤一次.
MongoDB索引
10Q: 索引類型有哪些?
- 單字段索引(Single Field Indexes)
- 復合索引(Compound Indexes)
- 多鍵索引(Multikey Indexes)
- 全文索引(text Indexes)
- Hash 索引(Hash Indexes)
- 通配符索引(Wildcard Index)
- 2dsphere索引(2dsphere Indexes)
11Q:MongoDB在A:{B,C}上建立索引,查詢A:{B,C}和A:{C,B}都會使用索引嗎?
由于MongoDB索引使用B-tree樹原理,只會在A:{B,C}上使用索引
MongoDB索引詳情可看文章【MongoDB系列--輕松應對面試中遇到的MongonDB索引(index)問題】,其中包括很多索引的問題:
- 創(chuàng)建索引,需要考慮的問題
- 索引限制問題
- 索引類型詳細解析
- 索引的種類問題
12Q:什么是聚合
聚合操作能夠處理數據記錄并返回計算結果。聚合操作能將多個文檔中的值組合起來,對成組數據執(zhí)行各種操作,返回單一的結果。它相當于 SQL 中的 count(*) 組合 group by。對于 MongoDB 中的聚合操作,應該使用aggregate()方法。
詳情可查看文章【MongoDB系列--深入理解MongoDB聚合(Aggregation)】,其中包括很多聚合的問題:
- 聚合管道(aggregation pipeline)的問題
- Aggregation Pipeline 優(yōu)化等問題
- Map-Reduce函數的問題
MongoDB分片
13Q:monogodb 中的分片sharding
分片sharding是將數據水平切分到不同的物理節(jié)點。當應用數據越來越大的時候,數據量也會越來越大。當數據量增長 時,單臺機器有可能無法存儲數據或可接受的讀取寫入吞吐量。利用分片技術可以添加更多的機器來應對數據量增加 以及讀寫操作的要求。
14Q:分片(Shard)和復制(replication)是怎樣工作的?
每一個分片(shard)是一個分區(qū)數據的邏輯集合。分片可能由單一服務器或者集群組成,我們推薦為每一個分片(shard)使用集群。
15Q:如果塊移動操作(moveChunk)失敗了,我需要手動清除部分轉移的文檔嗎?
不需要,移動操作是一致(consistent)并且是確定性的(deterministic)。
- 一次失敗后,移動操作會不斷重試。
- 當完成后,數據只會出現在新的分片里(shard)
16Q:數據在什么時候才會擴展到多個分片(Shard)里?
MongoDB 分片是基于區(qū)域(range)的。所以一個集合(collection)中的所有的對象都被存放到一個塊(chunk)中,默認塊的大小是 64Mb。當數據容量超過64 Mb,才有可能實施一個遷移,只有當存在不止一個塊的時候,才會有多個分片獲取數據的選項。
17Q:更新一個正在被遷移的塊(Chunk)上的文檔時會發(fā)生什么?
更新操作會立即發(fā)生在舊的塊(Chunk)上,然后更改才會在所有權轉移前復制到新的分片上。
18Q:如果一個分片(Shard)停止或很慢的時候,發(fā)起一個查詢會怎樣?
如果一個分片停止了,除非查詢設置了 “Partial” 選項,否則查詢會返回一個錯誤。如果一個分片響應很慢,MongoDB 會等待它的響應。
MongoDB復制集
19Q:MongoDB副本集實現高可用的原理
MongoDB 使用了其復制(Replica Set)方案,實現自動容錯機制為高可用提供了基礎。目前,MongoDB 支持兩種復制模式:
- Master / Slave ,主從復制,角色包括 Master 和 Slave 。
- Replica Set ,復制集復制,角色包括 Primary 和 Secondary 以及 Arbiter 。(生產環(huán)境必選)
?20Q:什么是master或primary?
副本集只能有一個主節(jié)點能夠確認寫入操作來接收所有寫操作,并記錄其操作日志中的數據集的所有更改(記錄在oplog中)。在集群中,當主節(jié)點(master)失效,Secondary節(jié)點會變?yōu)閙aster
21Q:什么是Slave或Secondary?
復制主節(jié)點的oplog并將oplog記錄的操作應用于其數據集,如果主節(jié)點宕機了,將從符合條件的從節(jié)點選舉選出新的主節(jié)點。
22Q:什么是Arbiter?
仲裁節(jié)點不維護數據集。 仲裁節(jié)點的目的是通過響應其他副本集節(jié)點的心跳和選舉請求來維護副本集中的仲裁
23Q:復制集節(jié)點類型有哪些?
- 優(yōu)先級0型(Priority 0)節(jié)點
- 隱藏型(Hidden)節(jié)點
- 延遲型(Delayed)節(jié)點
- 投票型(Vote)節(jié)點以及不可投票節(jié)點
24Q:啟用備份故障恢復需要多久?
從備份數據庫聲明主數據庫宕機到選出一個備份數據庫作為新的主數據庫將花費10到30秒時間.這期間在主數據庫上的操作將會失敗–包括寫入和強一致性讀取(strong consistent read)操作.然而,你還能在第二數據庫上執(zhí)行最終一致性查詢(eventually consistent query)(在slaveok模式下),即使在這段時間里.
MongoDB復制詳解分析可查看文章【MongoDB系列-解決面試中可能遇到的MongoDB復制集(replica set)問題】
25Q:raft選舉過程,投票規(guī)則?
選舉過程:
當系統(tǒng)啟動好之后,初始選舉后系統(tǒng)由1個Leader和若干個Follower角色組成。然后突然由于某個異常原因,Leader服務出現了異常,導致Follower角色檢測到和Leader的上次RPC更新時間超過給定閾值時間時。此時Follower會認為Leader服務已出現異常,然后它將會發(fā)起一次新的Leader選舉行為,同時將自身的狀態(tài)從Follower切換為Candidate身份。隨后請求其它Follower投票選擇自己。
投票規(guī)則:
- 當一個候選人獲得了同一個任期號內的大多數選票,就成為領導人。
- 每個節(jié)點最多在一個任期內投出一張選票。并且按照先來先服務的原則。
- 一旦候選人贏得選舉,立刻成為領導,并發(fā)送心跳維持權威,同時阻止新領導人的誕生
26Q:在哪些場景使用MongoDB?
規(guī)則: 如果業(yè)務中存在大量復雜的事務邏輯操作,則不要用MongoDB數據庫;在處理非結構化 / 半結構化的大數據使用MongoDB,操作的數據類型為動態(tài)時也使用MongoDB,比如:
- 內容管理系統(tǒng),切面數據、日志記錄
- 移動端Apps:O2O送快遞騎手、快遞商家的信息(包含位置信息)
- 數據管理,監(jiān)控數據
總結
以上是生活随笔為你收集整理的mongodb 默认端口号_快2020年了,该如何面对BATJM对MongoDB灵魂式的拷问呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 非自然月统计_技本功|统计信
- 下一篇: python configuration