
- MongoDB 教程
- MongoDB - 首頁
- MongoDB - 概述
- MongoDB - 優勢
- MongoDB - 環境搭建
- MongoDB - 資料建模
- MongoDB - 建立資料庫
- MongoDB - 刪除資料庫
- MongoDB - 建立集合
- MongoDB - 刪除集合
- MongoDB - 資料型別
- MongoDB - 插入文件
- MongoDB - 查詢文件
- MongoDB - 更新文件
- MongoDB - 刪除文件
- MongoDB - 投影
- MongoDB - 限制記錄數
- MongoDB - 排序記錄
- MongoDB - 索引
- MongoDB - 聚合
- MongoDB - 複製
- MongoDB - 分片
- MongoDB - 建立備份
- MongoDB - 部署
- MongoDB - Java
- MongoDB - PHP
- 高階 MongoDB
- MongoDB - 關係
- MongoDB - 資料庫引用
- MongoDB - 覆蓋查詢
- MongoDB - 查詢分析
- MongoDB - 原子操作
- MongoDB - 高階索引
- MongoDB - 索引限制
- MongoDB - ObjectId
- MongoDB - MapReduce
- MongoDB - 文字搜尋
- MongoDB - 正則表示式
- 使用 Rockmongo
- MongoDB - GridFS
- MongoDB - 固定集合
- 自動遞增序列
- MongoDB 有用資源
- MongoDB - 問答
- MongoDB - 快速指南
- MongoDB - 有用資源
- MongoDB - 討論
MongoDB 面試題
尊敬的讀者們,這些MongoDB 面試題是專門為了讓您熟悉在MongoDB面試中可能遇到的問題型別而設計的。根據我的經驗,優秀的 interviewers 很少會提前計劃好面試中要問的具體問題,通常會從該主題的一些基本概念開始,然後根據後續的討論和您的回答繼續提問。
NoSQL 資料庫提供了一種儲存和檢索資料的機制,其資料模型不同於關係資料庫(如 SQL、Oracle 等)中使用的表格關係。
NoSQL 資料庫型別
- 文件型
- 鍵值型
- 圖型
- 列存型
MongoDB 是一個文件型資料庫。它以基於 BSON 結構的文件形式儲存資料。這些文件儲存在集合中。
- 靈活的文件型資料模型
- 敏捷且高度可擴充套件的資料庫
- 比傳統資料庫更快
- 表達力強的查詢語言
名稱空間是資料庫名稱和集合名稱的串聯。例如,school.students,其中 school 是資料庫,students 是集合。
目前,MongoDB 提供了對 C、C++、C#、Java、Node.js、Perl、PHP、Python、Ruby、Scala、Go 和 Erlang 的官方驅動程式支援。MongoDB 可以輕鬆地與這些語言中的任何一種一起使用。還有一些其他社群支援的驅動程式,但上述驅動程式是由 MongoDB 官方提供的。
SQL 資料庫將資料儲存為表、行、列和記錄的形式。這些資料儲存在預定義的資料模型中,對於當今快速發展的現實世界應用來說,這種模型不夠靈活。相比之下,MongoDB 使用靈活的結構,可以輕鬆修改和擴充套件。
MongoDB 允許高度靈活和可擴充套件的文件結構。例如,MongoDB 中的一個數據文件可以有五列,而同一集合中的另一個文件可以有十列。此外,由於高效的索引和儲存技術,MongoDB 資料庫比 SQL 資料庫更快。
儘管這兩個資料庫都是文件型的,但對於需要動態查詢和在大型資料庫上具有良好效能的應用程式來說,MongoDB 是更好的選擇。另一方面,CouchDB 更適合於查詢變化較少且預定義查詢的應用程式。
不支援。MongoDB 不支援這種關係。
不支援。MongoDB 不支援預設的多文件 ACID 事務。但是,MongoDB 提供了對單個文件的原子操作。
預設情況下,MongoDB 不支援這種主鍵 - 外部索引鍵關係。但是,我們可以透過將一個文件嵌入到另一個文件中來實現這個概念。例如,地址文件可以嵌入到客戶文件中。
不需要。MongoDB 甚至可以在少量 RAM 上執行。MongoDB 根據其他程序的需求動態分配和釋放 RAM。
MongoDB 延遲將資料推送到磁碟。它會立即將更新寫入日誌,但將資料從日誌寫入磁碟的過程是延遲的。
ObjectID 是一種 12 位元組的 BSON 型別,包含:
- 4 個位元組的值表示秒數
- 3 個位元組的機器識別符號
- 2 個位元組的程序 ID
- 3 個位元組的計數器
正確
是的。從資料庫中刪除文件也會將其從磁碟中刪除。
use school; db.persons.insert( { name: "kadhir", dept: "CSE" } )
索引支援高效執行 MongoDB 中的查詢。如果沒有索引,MongoDB 必須執行集合掃描,即掃描集合中的每個文件,才能選擇與查詢語句匹配的文件。如果查詢存在相應的索引,MongoDB 可以使用該索引來限制它必須檢查的文件數量。
預設情況下,MongoDB 為每個集合建立 _id 索引。
可以。可以在 MongoDB 中對陣列欄位進行索引。在這種情況下,MongoDB 將為陣列的每個值建立索引。
覆蓋查詢是指:
- 查詢中使用的欄位是查詢中使用的索引的一部分,並且
- 結果中返回的欄位也在同一個索引中
由於所有欄位都包含在索引中,MongoDB 可以使用同一個索引匹配查詢條件並返回結果欄位,而無需檢視文件內部。由於索引儲存在 RAM 中或按順序位於磁碟上,因此這種訪問速度要快得多。
是的。MongoDB 支援建立文字索引以支援對字串內容中的文字進行搜尋。這是 2.6 版本中引入的一項新功能。
如果索引不適合 RAM,MongoDB 將從磁碟讀取資料,這比從 RAM 讀取資料慢得多。
db.collection.getIndexes()
預設配置下,MongoDB 每 60 秒將更新寫入磁碟。但是,可以使用 commitIntervalMs 和 syncPeriodSecs 選項進行配置。
為了在 MongoDB 中實現事務和鎖定的概念,我們可以使用文件巢狀,也稱為嵌入式文件。MongoDB 支援單個文件內的原子操作。
聚合操作處理資料記錄並返回計算結果。聚合操作將多個文件中的值組合在一起,並且可以對分組資料執行各種操作以返回單個結果。MongoDB 提供三種執行聚合的方法:聚合管道、map-reduce 函式以及單用途聚合方法和命令。
分片是一種將資料儲存在多臺機器上的方法。MongoDB 使用分片來支援具有非常大的資料集和高吞吐量操作的部署。
複製是將資料同步到多臺伺服器的過程。複製提供冗餘並提高資料可用性。透過在不同的資料庫伺服器上擁有多個數據副本,複製可以保護資料庫免受單個伺服器丟失的影響。複製還可以幫助您從硬體故障和服務中斷中恢復。
主節點(或主伺服器)是可以接受寫入操作的節點。MongoDB 的複製是“單主”的:一次只有一個節點可以接受寫入操作。
次節點(或從伺服器)是隻讀節點,它們從主節點複製資料。
錯誤。MongoDB 僅將資料寫入主副本集。
MongoDB 預先分配資料檔案以預留空間並在設定伺服器時避免檔案系統碎片。
對於以下情況,應考慮嵌入文件:
- 實體之間的“包含”關係
- 一對多關係
- 效能原因
在執行 32 位版本的 MongoDB 時,伺服器的總儲存大小(包括資料和索引)為 2 GB。因此,不要在 32 位機器上將 MongoDB 部署到生產環境。
如果您執行的是 64 位版本的 MongoDB,則儲存大小几乎沒有限制。
儲存引擎是資料庫中負責管理資料如何儲存在磁碟上的部分。例如,一個儲存引擎可能為讀密集型工作負載提供更好的效能,而另一個儲存引擎可能支援更高的寫入吞吐量。
MongoDB 使用 MMAPv1 和 WiredTiger。
資料庫分析器收集有關 MongoDB 寫入操作、遊標、正在執行的 mongod 例項上的資料庫命令的細粒度資料。您可以針對每個資料庫或每個例項啟用分析。
資料庫分析器將其收集的所有資料寫入 system.profile 集合,這是一個固定大小的集合。
在啟用日誌記錄的情況下,MongoDB 會在將更改寫入磁碟上的資料檔案之前,先將寫入操作儲存在記憶體中並在磁碟日誌中應用。對日誌的寫入是原子的,確保磁碟日誌檔案的完整性。啟用日誌記錄後,MongoDB 會在 dbPath 定義的目錄(預設為 /data/db)中建立一個日誌子目錄。
db.isMaster()
不能。MMAPv1 不允許配置快取大小。
對於 WiredTiger 儲存引擎,您可以指定 WiredTiger 將用於所有資料的快取的最大大小。這可以透過 `storage.wiredTiger.engineConfig.cacheSizeGB` 選項來完成。
MongoDB 使用讀寫鎖,允許併發讀取器共享訪問資源(例如資料庫或集合),但只允許單個寫操作獨佔訪問。
您可以對遊標使用 `snapshot()` 方法來隔離特定情況下的操作。`snapshot()` 遍歷 `_id` 欄位上的索引,並保證查詢最多隻返回每個文件一次。
是的。`copyDatabase()`、`repairDatabase()` 等操作可以鎖定多個相關的資料庫。
在複製過程中,當 MongoDB 向主節點上的集合寫入資料時,MongoDB 也會向主節點的 oplog 寫入資料,oplog 是本地資料庫中的一個特殊集合。因此,MongoDB 必須同時鎖定集合的資料庫和本地資料庫。
GridFS 是一個用於儲存和檢索超過 BSON 文件大小限制(16MB)的檔案的規範。它不是將檔案儲存在單個文件中,而是將檔案分成多個部分(或塊),並將每個塊作為單獨的文件儲存。
是的。在 2.4 版本中新增的 V8 JavaScript 引擎允許同時執行多個 JavaScript 操作。
`explain()` 命令可用於獲取此資訊。可能的模式包括:'queryPlanner'、'executionStats' 和 'allPlansExecution'。
下一步是什麼?
接下來,您可以回顧一下您之前完成的與該主題相關的作業,並確保您能夠自信地談論它們。如果您是應屆畢業生,面試官並不期望您能回答非常複雜的問題,而是希望您的基礎概念非常紮實。
其次,如果您無法回答一些問題,這並不重要,重要的是,無論您回答了什麼問題,都必須充滿自信地回答。所以在面試中要保持自信。Tutorialspoint 祝您面試順利,並祝您未來的事業一切順利!乾杯 :-)