首頁>技術>

MongoDB 2021最新高頻面試題1、MongoDB是什麼?2、MongoDB有哪些特點?3、MySQL與MongoDB之間最基本的差別是什麼?4、monogodb中的分片什麼意思?5、MongoDB中的名稱空間是什麼意思?6、在MongoDb中索引是什麼?7、MongoDB成為最好NoSQL資料庫的原因是什麼?8、解釋一下什麼是MongoDB中的GridFS ?9、分析器在MongoDB中的作用是什麼?10、MongoDB更新操作會立刻 fsync 到磁碟?11、MongoDB副本集選舉條件有那些?12、簡單的描述下MongoDB選舉流程13、什麼是MongoDB分片叢集?14、MongoDB中為何需要水平分片?15、MongoDB中分片鍵的意義何在?16、什麼情況下需要用到MongoDB的分片?17、構建一個分片叢集需要用的那些角色?分別是什麼?18、如何執行事務/加鎖?19、副本集角色有那些?做是什麼?20、非關係型資料庫有哪些型別?21、資料在什麼時候才會擴充套件到多個分片(shard)裡?22、如果在一個分片(shard)停止或者很慢的時候,我發起一個查詢會怎樣?23、如何理解MongoDB中的GridFS機制,MongoDB為何使用GridFS來儲存檔案?24、我應該啟動一個叢集分片(sharded)還是一個非叢集分片的 MongoDB 環境?25、MongoDB適合應用在那些場景?26、"ObjectID"有哪些部分組成27、如何使用"AND"或"OR"條件迴圈查詢集合中的文件28、在MongoDB中如何排序?29、什麼是聚合?30、 raft選舉過程,投票規則?

1、MongoDB是什麼?

2、MongoDB有哪些特點?

MongoDB是由C++語言編寫的,是一個基於分散式檔案儲存的開源資料庫系統。在高負載的情況下,新增更多

的節點,可以保證伺服器效能。 MongoDB旨在為WEB應用提供可擴充套件的高效能資料儲存解決方案,將資料存

儲為一個文件,資料結構由鍵值(key=>value)對組成。MongoDB文件類似於 JSON 物件。欄位值可以包含

其他文件,陣列及文件陣列。

(1)MongoDB 是一個面向文件儲存的資料庫,操作起來比較簡單和容易;

(2)可以在MongoDB記錄中設定任何屬性的索引;

(3)可以透過本地或者網路建立資料映象,這使得MongoDB有更強的擴充套件性:

(4)如果負載的增加(需要更多的儲存空間和更強的處理能力),它可以分佈在計算機網路中的其他節點上

這就是所謂的分片;

(5)支援豐富的查詢表示式,查詢指令使用JSON形式的標記,可輕易查詢文件中內嵌的物件及陣列。

3、MySQL與MongoDB之間最基本的差別是什麼?

4、monogodb中的分片什麼意思?

5、MongoDB中的名稱空間是什麼意思?

6、在MongoDb中索引是什麼?

7、MongoDB成為最好NoSQL資料庫的原因是什麼?

8、解釋一下什麼是MongoDB中的GridFS ?

9、分析器在MongoDB中的作用是什麼?

10、MongoDB更新操作會立刻 fsync 到磁碟?

MySQL和MongoDB兩者都是免費開源的資料庫。MySQL和MongoDB有許多基本差別包括資料的表示查詢、關

系、事務、schema的設計和定義、標準化、速度和效能。透過比較MySQL和MongoDB,實際上我們是在比較

關係型和非關係型資料庫,即資料儲存結構不同。

分片是將資料水平切分到不同的物理節點,當應用資料越來越大的時候,資料量也會越來越大。當資料量增長

時,單臺機器有可能無法儲存資料或可接受的讀取寫入吞吐量,利用分片技術可以新增更多的機器來應對資料

量增加以及讀寫操作的要求。

mongodb儲存bson物件在叢集(collection)中,資料庫名字和叢集名字以句點連結起來叫做名字空間,一

個集合名稱空間又有多個數據域(extent),集合命名空間裡儲存著集合的元資料,比如集合名稱,集合的第

一個數據域和最後一個數據域的位置等等。而一個數據域由若干條文件(document)組成,每個資料域都有一

個頭部,記錄著第一條文件和最後一條文件的為知,以及該資料域的一些元資料。extent之間,document之

間透過雙向連結串列連線,索引的儲存資料結構是B樹,索引名稱空間儲存著對B樹的根節點的指標。

索引用於高效的執行查詢,沒有索引的MongoDB將掃描整個集合中的所有文件,這種掃描效率很低,需要處理

大量的資料,索引是一種特殊的資料結構,將一小塊資料集合儲存為容易遍歷的形式。索引能夠儲存某種特殊

欄位或欄位集的值,並按照索引指定的方式將欄位值進行排序。

以下特點使得MongoDB成為最好的NoSQL資料庫:面向檔案的;高效能;高可用性;易擴充套件性;豐富的查詢語

言。

為了儲存和檢索大檔案,例如影象,影片檔案和音訊檔案,使用GridFS。預設情況下,它使用兩個檔案

fs.files和fs.chunks來儲存檔案的元資料和塊。

MongoDB中包括了一個可以顯示資料庫中每個操作效能特點的資料庫分析器。透過這個分析器你可以找到比預

期慢的查詢(或寫操作);利用這一資訊,比如,可以確定是否需要新增索引。

不會,磁碟寫操作預設是延遲執行的。寫操作可能在兩三秒(預設在 60 秒內)後到達磁碟。例如,如果一秒

內資料庫收到一千個對一個物件遞增的操作,僅重新整理磁碟一次。(注意,儘管 fsync 選項在命令列和經過

getLastError_old 是有效的)

11、MongoDB副本集選舉條件有那些?

12、簡單的描述下MongoDB選舉流程

13、什麼是MongoDB分片叢集?

14、MongoDB中為何需要水平分片?

15、MongoDB中分片鍵的意義何在?

1.複製集初始化。

2.主節點掛掉。

3.主節點脫離副本集(可能是網路原因)。

4.參與選舉的節點數量必須大於副本集總節點數量的一半,如果已經小於一半了所有節點保持只讀狀態。

1、副本集中的主節點選舉必須滿足"大多數"的原則,所謂"大多數"是指副本中一半以上的成員。副本集中成

員只有在得到大多數成員投票支援時,才能成為主節點。例如:有N個副本整合員節點,必須有N/2+1個成員

投票支援某個節點,此節點才能成為主節點。注意:副本集中若有成員節點處於不可用狀態,並不會影響副本

集中的"大多數","大多數"是以副本集的配置來計算的。

2、仲裁節點(Arbiter)它並不儲存資料,並且不能被選舉為主節點,但是具有投票權。仲裁節點使用最小

的資源,不能將Arbiter部署在同一個資料集節點中。

3、副本集中最好是有奇數個成員節點,如果有偶數個節點,最好加一個仲裁節點。若副本集中有偶數個成員

節點,如圖2所示,IDC1網路連不通IDC2,IDC1和IDC2內的成員節點分別會發生選舉主節點的行為,然而選

舉因都無法滿足大多數的原則,都不能選出主節點;加入一個仲裁節點之後,則副本集就能滿足大多數原則,

從中選出主節點了。

4.如果副本整合員節點數量是奇數,就不再需要仲裁者。但是如果在成員節點是奇數時,強行使用仲裁者,會

導致選舉耗時變長。由於添加了仲裁者就可能出現兩個成員節點票數相同的情況,從而導致選舉耗時變長。

5.若在一輪投票中,副本集中成員節點被投了反對票,則本輪不能被選為主節點。例如,在一個10個成員節點

的副本集,某輪投票中,成員節點A由於資料延遲較大被某個成員節點投了反對票,則A同時收到了9票贊成

票,然而A仍然不能被選為主節點。

6.叢集中的優先順序為0的節點不能成為主節點,並且不能觸發選舉,但是具有投票權,並且擁有與主節點一致

的資料集。

Sharding cluster是一種可以水平擴充套件的模式,在資料量很大時特給力,實際大規模應用一般會採用這種架

構去構建。sharding分片很好的解決了單臺伺服器磁碟空間、記憶體、cpu等硬體資源的限制問題,把資料水

平拆分出去,降低單節點的訪問壓力。每個分片都是一個獨立的資料庫,所有的分片組合起來構成一個邏輯上

的完整的資料庫。因此,分片機制降低了每個分片的資料操作量及需要儲存的資料量,達到多臺伺服器來應對

不斷增加的負載和資料的效果。

1)減少單機請求數,將單機負載,提高總負載

2)減少單機的儲存空間,提高總存空間

16、什麼情況下需要用到MongoDB的分片?

17、構建一個分片叢集需要用的那些角色?分別是什麼?

18、如何執行事務/加鎖?

19、副本集角色有那些?做是什麼?

20、非關係型資料庫有哪些型別?

1、一個好的片鍵對分片至關重要。 片鍵必須是一個索引 ,通 過 sh.shardCollection 加會自動建立索

引。一個自增的片鍵對寫入和資料均勻分佈就不是很好, 因為自增的片鍵總會在一個分片上寫入,後續達到某

個閥值可能會寫到別的分片。但是按照片鍵查詢會非常高效。隨機片鍵對資料的均勻分佈效果很好。注意儘量

避免在多個分片上進行查詢。

2、在所有分片上查詢,mongos 會對結果進行歸併排序,提高查詢效率和速度

1)機器的磁碟不夠用了。使用分片解決磁碟空間的問題。

2)單個mongod已經不能滿足寫資料的效能要求。透過分片讓寫壓力分散到各個分片上面,使用分片伺服器自

身的資源。

3)想把大量資料放到記憶體裡提高效能。和上面一樣,透過分片使用分片伺服器自身的資源。

1)分片伺服器(Shard Server)

mongod 例項,用於儲存實際的資料塊,實際生產環境中一個 shard server 角色可由幾臺機器組個一

個 relica set 承擔,防止主機單點故障

這是一個獨立普通的mongod程序,儲存資料資訊。可以是一個副本集也可以是單獨的一臺伺服器。

2)配置伺服器(Config Server)

mongod 例項,儲存了整個 Cluster Metadata,其中包括 chunk 資訊。

這是一個獨立的mongod程序,儲存叢集和分片的元資料,即各分片包含了哪些資料的資訊。最先開始建立,

啟用日誌功能。像啟動普通的 mongod 一樣啟動

配置伺服器,指定configsvr 選項。不需要太多的空間和資源,配置伺服器的 1KB 空間相當於真是資料

的 200MB。儲存的只是資料的分佈表。

3)路由伺服器(Route Server)

mongos例項,前端路由,客戶端由此接入,且讓整個叢集看上去像單一資料庫,前端應用

起到一個路由的功能,供程式連線。本身不儲存資料,在啟動時從配置伺服器載入叢集資訊,開啟 mongos

程序需要知道配置伺服器的地址,指定configdb選項。

MongoDB沒有使用傳統的鎖或者複雜的帶回滾的事務,因為它設計的宗旨是輕量,快速以及可預計的高效能。

可以把它類比成MySQL MylSAM的自動提交模式。透過精簡對事務的支援,效能得到了提升,特別是在一個可

能會穿過多個伺服器的系統裡。

1. 主節點(Primary)

接收所有的寫請求,然後把修改同步到所有Secondary。一個Replica Set只能有一個Primary節點,當

Primary掛掉後,其他Secondary或者Arbiter節點會重新選舉出來一個主節點。

預設讀請求也是發到Primary節點處理的,可以透過修改客戶端連線配置以支援讀取Secondary節點。

2. 副本節點(Secondary)

與主節點保持同樣的資料集。當主節點掛掉的時候,參與選主。

3. 仲裁者(Arbiter)

不保有資料,不參與選主,只進行選主投票。使用Arbiter可以減輕資料儲存的硬體需求,Arbiter幾乎沒什

麼大的硬體資源需求,但重要的一點是,在生產環境下它和其他資料節點不要部署在同一臺機器上。

21、資料在什麼時候才會擴充套件到多個分片(shard)裡?

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

23、如何理解MongoDB中的GridFS機制,MongoDB為何使用GridFS來儲存檔案?

24、我應該啟動一個叢集分片(sharded)還是一個非叢集分片的 MongoDB 環境?

25、MongoDB適合應用在那些場景?

1、 Key-Value 儲存 Eg:Amazon S3

2、圖表 Eg:Neo4J

3、文件儲存 Eg:MongoDB

4、基於列儲存 Eg:Cassandra

MongoDB 分片是基於區域(range)的。所以一個集合(collection)中的所有的物件都被存放到一個塊

(chunk)中。只有當存在多餘一個塊的時候,才會有多個分片獲取資料的選項。現在,每個預設塊的大小是

64Mb,所以你需要至少 64 Mb 空間才可以實施一個遷移。

如果一個分片(shard)停止了,除非查詢設定了"Partial"選項,否則查詢會返回一個錯誤。如果一個分片

(shard)響應很慢,MongoDB則會等待它的響應。

GridFS是一種將大型檔案儲存在MongoDB中的檔案規範。使用GridFS可以將大檔案分隔成多個小文件存放,

這樣我們能夠有效的儲存大文件,而且解決了BSON物件有限制的問題。

為開發便捷起見,我們建議以非叢集分片(unsharded)方式開始一個 MongoDB 環境,除非一臺伺服器不足

以存放你的初始資料集。從非叢集分片升級到叢集分片(sharding)是無縫的,所以在你的資料集還不是很大

的時候沒必要考慮叢集分片(sharding)。

26、"ObjectID"有哪些部分組成

27、如何使用"AND"或"OR"條件迴圈查詢集合中的文件

28、在MongoDB中如何排序?

29、什麼是聚合?

從目前阿里雲 MongoDB 雲資料庫上的使用者看,MongoDB 的應用已經滲透到各個領域,比如遊戲、物流、電

商、內容管理、社交、物聯網、影片直播等,以下是幾個實際的應用案例。

遊戲場景,使用 MongoDB 儲存遊戲使用者資訊,使用者的裝備、積分等直接以內嵌文件的形式儲存,方便查詢、

更新

物流場景,使用 MongoDB 儲存訂單資訊,訂單狀態在運送過程中會不斷更新,以 MongoDB 內嵌陣列的形

式來儲存,一次查詢就能將訂單所有的變更讀取出來。

人、地點等功能

物聯網場景,使用 MongoDB 儲存所有接入的智慧裝置資訊,以及裝置彙報的日誌資訊,並對這些資訊進行多

維度的分析

影片直播,使用 MongoDB 儲存使用者資訊、禮物資訊等

一共有四部分組成:時間戳、客戶端ID、客戶程序ID、三個位元組的增量計數器。

_id是一個 12 位元組長的十六進位制數,它保證了每一個文件的唯一性。在插入文件時,需要提供_id。如果你

不提供,那麼 MongoDB 就會為每一文件提供一個唯一的 id。_id的頭 4 個位元組代表的是當前的時間戳,

接著的後 3 個位元組表示的是機器 id 號,接著的 2 個位元組表示 MongoDB 伺服器程序 id,最後的 3 個

位元組代表遞增值。

在 find() 方法中,如果傳入多個鍵,並用逗號( , )分隔它們,那麼 MongoDB 會把它看成是AND條件。

>db.mycol.find({key1:value1, key2:value2}).pretty()

若基於OR條件來查詢文件,可以使用關鍵字$or。

>db.mycol.find(

{

$or: [

{key1: value1}, {key2:value2}

]

}

).pretty()

MongoDB 中的文件排序是透過 sort() 方法來實現的。 sort() 方法可以透過一些引數來指定要進行排序

的欄位,並使用 1 和 -1 來指定排序方式,其中 1 表示升序,而 -1 表示降序。

>db.connectionName.find({key:value}).sort({columnName:1})

30、raft選舉過程,投票規則?

聚合操作能夠處理資料記錄並返回計算結果。聚合操作能將多個文件中的值組合起來,對成組資料執行各種操

作,返回單一的結果。它相當於 SQL 中的 count(*) 組合 group by。對於 MongoDB 中的聚合操作,

應該使用 aggregate() 方法。

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

選舉過程:

當系統啟動好之後,初始選舉後系統由1個Leader和若干個Follower角色組成。然後突然由於某個異常

原因,Leader服務出現了異常,導致Follower角色檢測到和Leader的上次RPC更新時間超過給定閾值時間

時。此時Follower會認為Leader服務已出現異常,然後它將會發起一次新的Leader選舉行為,同時將自身

的狀態從Follower切換為Candidate身份。隨後請求其它Follower投票選擇自己。

投票規則:

當一個候選人獲得了同一個任期號內的大多數選票,就成為領導人。

每個節點最多在一個任期內投出一張選票。並且按照先來先服務的原則。

一旦候選人贏得選舉,立刻成為領導,併發送心跳維持權威,同時阻止新領導人的誕生

MongoDB 2021最新高頻面試題1、MongoDB是什麼?2、MongoDB有哪些特點?3、MySQL與MongoDB之間最基本的差別是什麼?4、monogodb中的分片什麼意思?5、MongoDB中的名稱空間是什麼意思?6、在MongoDb中索引是什麼?7、MongoDB成為最好NoSQL資料庫的原因是什麼?8、解釋一下什麼是MongoDB中的GridFS ?9、分析器在MongoDB中的作用是什麼?10、MongoDB更新操作會立刻 fsync 到磁碟?11、MongoDB副本集選舉條件有那些?12、簡單的描述下MongoDB選舉流程13、什麼是MongoDB分片叢集?14、MongoDB中為何需要水平分片?15、MongoDB中分片鍵的意義何在?16、什麼情況下需要用到MongoDB的分片?17、構建一個分片叢集需要用的那些角色?分別是什麼?18、如何執行事務/加鎖?19、副本集角色有那些?做是什麼?20、非關係型資料庫有哪些型別?21、資料在什麼時候才會擴充套件到多個分片(shard)裡?22、如果在一個分片(shard)停止或者很慢的時候,我發起一個查詢會怎樣?23、如何理解MongoDB中的GridFS機制,MongoDB為何使用GridFS來儲存檔案?24、我應該啟動一個叢集分片(sharded)還是一個非叢集分片的 MongoDB 環境?25、MongoDB適合應用在那些場景?26、"ObjectID"有哪些部分組成27、如何使用"AND"或"OR"條件迴圈查詢集合中的文件28、在MongoDB中如何排序?29、什麼是聚合?30、raft選舉過程,投票規則?

13
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 你真的懂VLOOKUP函式嗎?