MongoDB 面試題
您在建立MongoDB時想解決什麼問題?
我們曾經並且正在嘗試構建我們作為開發人員一直想要的資料庫。對於純報告,SQL 和關係是很好的,但是在構建資料時總是需要一些不同的東西:使編碼水平擴充套件的東西。
MongoDB 早期的主要障礙是什麼?
整個 nosql 領域的一大障礙是,從關係轉向任何事物對使用者來說都是一大步。關係是一個偉大的每個從學校畢業的人都知道。然而,計算機架構正在發生變化,雲端計算即將到來。我們需要在完全不同的環境中執行的解決方案。也很有趣——因此產品的動態模式性質。
未來 3 個月 MongoDB 將何去何從?6個月?12個月?
我們當然相信還有很多事情要做,而且需要數年甚至數月的時間。路線圖中的重點是更快的聚合能力、全文搜尋、更好的併發性以及輕鬆的大型叢集設定和管理。目前的普遍關注點是確保產品適用於關鍵任務生產應用程式。
您希望對MongoDB做一些不同的事情嗎?
事後看來,我對兩三年前做出的許多設計決定感到非常高興。我們在那裡很幸運。我非常喜歡資料模型。我喜歡強一致的操作是可能的:有很多用例,例如只註冊一個新使用者,在那裡人們需要它。更重要的是,還有一長串我們想做但還沒有做的事情。
什麼使 Mongodb 最好?
面向文件
高效能
高可用性
易於擴充套件
豐富的查詢語言
如果我使用複製,某些成員可以使用日記功能而其他成員不可以嗎?
是的
我可以使用日誌功能來執行安全的熱備份嗎?
是的
什麼是 32 位細微差別?
有日誌記錄的額外記憶體對映檔案活動。這將進一步限制 32 位構建的有限資料庫大小。因此,目前在 32 位系統上預設禁用日誌記錄。
如果條目不完整(例如失敗發生在一箇中間),日誌重播是否會出現問題?
每個日誌(組)寫入都是一致的,除非完成,否則在恢復期間不會重放。
Profiler 在 MongoDB 中的作用是什麼?
MongoDB 包含一個資料庫分析器,它顯示針對資料庫的每個操作的效能特徵。使用分析器,您可以找到比應有的速度慢的查詢(和寫入操作);例如,使用此資訊來確定何時需要索引。
什麼是“名稱空間”?
MongoDB 將 BSON 物件儲存在集合中。資料庫名稱和集合名稱(中間有句點)的串聯稱為名稱空間。
如果刪除物件屬性,它是否會從商店中刪除?
是的,您刪除該屬性,然後 re-save() 物件。
是否允許空值?
對於物件的成員,是的。儘管 null 不是物件,但您不能將 null 新增到資料庫集合中。不過,您可以新增 {}。
是否立即將 fsync 更新到磁碟?
不,預設情況下寫入磁碟是惰性的。幾秒鐘後寫入可能會命中磁碟。例如,如果資料庫在一秒內收到一個物件的一千個增量,它只會被重新整理到磁碟一次。(注意 fsync 選項在命令列和通過 getLastError_old 都可用。)
我如何進行交易/鎖定?
MongoDB 不使用傳統的鎖定或帶回滾的複雜事務,因為它被設計為輕量級、快速且效能可預測。它可以被認為類似於 MySQL MyISAM 自動提交模型。通過保持事務支援極其簡單,效能得到了增強,尤其是在可能跨多個伺服器執行的系統中。
為什麼我的資料檔案這麼大?
MongoDB會主動預分配保留空間以避免檔案系統碎片化。
副本集故障轉移需要多長時間?
其他成員可能需要 10 到 30 秒的時間來宣佈主要成員退出並選出新的主要成員。在這段時間內,叢集因“主要”操作(即寫入和強一致性讀取)而關閉。但是,您可以隨時(在 slaveOk 模式下)對輔助節點執行最終一致的查詢,包括在此視窗期間。
什麼是大師或初級?
這是一個節點/成員,它當前是主節點並處理副本集的所有寫入。在副本集中,在發生故障轉移事件時,不同的成員可以成為主要成員。
什麼是次要或奴隸?
輔助節點是從當前主節點應用操作的節點/成員。這是通過拖尾複製 oplog (local.oplog.rs) 來完成的。
從主節點到輔助節點的複製是非同步的,但是輔助節點會盡量保持最新狀態(通常在 LAN 上只有幾毫秒)。
我是否必須呼叫 getLastError 才能使寫入持久化?
不。如果您不呼叫 getLastError(又名“安全模式”),伺服器會執行與您呼叫時完全相同的行為。getLastError 呼叫只是讓人們確認寫入操作已成功提交。當然,通常您會需要這種確認,但寫入的安全性及其耐用性是獨立的。
我應該從分片還是非分片的 MongoDB 環境開始?
為了簡單和快速啟動,我們建議不分片開始,除非您的初始資料集不適合單個伺服器。從未分片升級到分片是簡單且無縫的,因此在資料集很大之前設定分片並沒有太多優勢。
分片如何與複製一起工作?
每個分片都是分割槽資料的邏輯集合。分片可以由單個伺服器或一組副本組成。我們建議為每個分片使用一個副本集。
資料何時會在多個分片上?
MongoDB 分片是基於範圍的。所以集合中的所有物件都被放入一個塊中。只有當有超過 1 個塊時,才有多個分片獲取資料的選項。現在,預設塊大小為 64mb,因此您至少需要 64mb 才能進行遷移。
如果我嘗試更新正在遷移的塊上的文件,會發生什麼?
更新將立即在舊分片上進行,然後更改將在所有權轉移之前複製到新分片。
如果分片出現故障或速度緩慢而我執行查詢怎麼辦?
如果分片關閉,除非設定了“部分”查詢選項,否則查詢將返回錯誤。如果分片響應緩慢,mongos 將等待它。
我可以刪除 moveChunk 目錄中的舊檔案嗎?
是的,這些檔案是在正常的分片平衡操作期間作為備份製作的。操作完成後就可以刪除了。清理過程目前是手動的,因此請務必注意以釋放空間。
如何檢視 mongos 使用的連線?
db._adminCommand(“connPoolStats”);
如果 moveChunk 失敗,我是否需要清理部分移動的文件?
不,塊移動是一致且確定的;移動將重試,完成後資料將僅在新分片上。
相關文章
- MongoDB面試專題33道解析MongoDB面試
- MongoDB系列-解決面試中可能遇到的MongoDB複製集(replica set)問題MongoDB面試
- HTML最新面試題(筆試面試題)HTML面試題筆試
- 面試題:面試經面試題
- 「面試題」20+Vue面試題整理面試題Vue
- MongoDB系列--輕鬆應對面試中遇到的MongonDB索引(index)問題MongoDB面試索引Index
- 面試題面試題
- react面試題 機試題React面試題
- 面試測試題面試
- 測試面試題面試題
- RabbitMQ面試專題,面試必看MQ面試
- 面試題1:9月25日面試題面試題
- [面試題]事件迴圈經典面試題解析面試題事件
- 【面試】面試常見問題整理面試
- 【Java面試】JSP常見面試題!JavaJS面試題
- 【Java面試】Servlet常見面試題!JavaServlet面試題
- 【Java面試】 Javascript常見面試題!JavaScript面試題
- webpack面試題Web面試題
- Promise面試題Promise面試題
- 面試題-mysql面試題MySql
- 面試題1面試題
- vue 面試題Vue面試題
- JavaScript面試題JavaScript面試題
- vue面試題!!!Vue面試題
- 面試題2面試題
- redis面試題Redis面試題
- 面試題整理面試題
- mybatis面試題MyBatis面試題
- 2024.04.07面試題面試題
- React面試題React面試題
- 面試題:JS面試題JS
- 面試題:HTTP面試題HTTP
- vue面試題Vue面試題
- Go 面試題Go面試題
- PHP 面試題PHP面試題
- HashMap面試題HashMap面試題
- List面試題面試題
- MyBatis 面試題MyBatis面試題