知名的教育行業(yè)網(wǎng)站開發(fā)推廣app用什么平臺比較好
1. MongoDB 中必須調(diào)用 getLastError 來確保寫操作生效嗎?
MongoDB中不管有沒有調(diào)用getLastError(又稱為Safe Mode),服務(wù)器執(zhí)行的操作都會一樣。
而調(diào)用getLastError只是為了確認(rèn)寫操作是否成功提交,但是寫操作的安全性和是否生效不是由這個(gè)決定的。
2. MongoDB 開發(fā)環(huán)境中有必要啟動一個(gè)集群分片(sharded)嗎?
為開發(fā)便捷起見,建議以非集群分片(unsharded)方式開始一個(gè)MongoDB環(huán)境,除非一臺服務(wù)器不足以存放初始數(shù)據(jù)集。
從非集群分片升級到集群分片(sharding)是無縫的,所以在數(shù)據(jù)集還不是很大的時(shí)候沒必要考慮集群分片(sharding)。
3. MongoDB 中分片(sharding)和復(fù)制(replication)是如何工作的?
每一個(gè)分片(shard)是一個(gè)分區(qū)數(shù)據(jù)的邏輯集合。
分片可能由單一服務(wù)器或者集群組成,推薦為每一個(gè)分片(shard)使用集群。
4. 數(shù)據(jù)在什么時(shí)候才會擴(kuò)展到多個(gè)分片(shard)中?
MongoDB分片是基于區(qū)域(range)的,因此一個(gè)集合(collection)中的所有的對象都被存放到一個(gè)塊(chunk)中。只有當(dāng)存在多余一個(gè)塊的時(shí)候,才會有多個(gè)分片獲取數(shù)據(jù)的選項(xiàng)。目前,MongoDB每個(gè)默認(rèn)塊的大小是64Mb,所以需要至少64Mb空間才可以實(shí)施一個(gè)遷移。
5. 當(dāng)試圖更新一個(gè)正在被遷移的塊(chunk)上的文檔時(shí)會發(fā)生什么?
更新操作會立即發(fā)生在舊的分片(shard)上,然后更改才會在所有權(quán)轉(zhuǎn)移(ownership transfers)前復(fù)制到新的分片上。
6. 一個(gè)分片(shard)停止或者很慢時(shí),發(fā)起查詢會怎樣?
如果一個(gè)分片(shard)停止了,除非查詢設(shè)置了“Partial”選項(xiàng),否則查詢會返回一個(gè)錯(cuò)誤。
如果一個(gè)分片(shard)響應(yīng)很慢,MongoDB則會等待它的響應(yīng)。
7. MongoDB 中可以把 moveChunk 目錄的舊文件刪除嗎?
MongoDB中可以把moveChunk目錄的舊文件刪除。
這些文件是在分片(shard)進(jìn)行均衡操作(balancing)的時(shí)候產(chǎn)生的臨時(shí)文件。一旦這些操作已經(jīng)完成,相關(guān)的臨時(shí)文件也應(yīng)該被刪除掉。但目前清理工作是需要手動的,所以需要謹(jǐn)慎考慮此操作,再釋放這些文件的空間。
8. 如何查看 MongoDB 正在使用的鏈接?
db._adminCommand("connPoolStats");
9. MongoDB 中塊移動操作(moveChunk)失敗,需要手動清除部分轉(zhuǎn)移的文檔嗎?
MongoDB中塊移動操作(moveChunk)失敗,不需要手動清除部分轉(zhuǎn)移的文檔。
移動操作是一致(consistent)并且是確定性的(deterministic);一次失敗后,移動操作會不斷重試;當(dāng)完成后,數(shù)據(jù)只會出現(xiàn)在新的分片中(shard)。
10. MongoDB 在 A:{B,C} 上建立索引,查詢 A:{B,C} 和 A:{C,B} 都會使用索引嗎?
MongoDB在A:{B,C}上建立索引,只會在A:{B,C}上使用索引。
11. MongoDB 中當(dāng)更新一個(gè)正在被遷移的塊(Chunk)上的文檔時(shí)會發(fā)生什么?
當(dāng)更新一個(gè)正在被遷移的塊(Chunk)上的文檔時(shí)更新操作會立即發(fā)生在舊的塊(Chunk)上,然后更改才會在所有權(quán)轉(zhuǎn)移前復(fù)制到新的分片上。
12. MongoDB 支持存儲過程嗎?如何使用?
MongoDB支持存儲過程,它是JavaScript寫的,保存在db.system.js表中。
13. MongoDB 中如何理解 GridFS 機(jī)制,為什么使用 GridFS 存儲文件?
GridFS是一種將大型文件存儲在MongoDB中的文件規(guī)范。使用GridFS可以將大文件分隔成多個(gè)小文檔存放,這樣我們能夠有效的保存大文檔,而且解決了BSON對象有限制的問題。
14. MongoDB 是由哪種語言寫的?
MongoDB用C++編寫的,流行的開源數(shù)據(jù)庫MySQL也是用C++開發(fā)的。C++于1983年發(fā)行,是一種使用廣泛的計(jì)算機(jī)程序設(shè)計(jì)語言。它是一種痛用程序設(shè)計(jì)語言,支持多種編程模式。
15. MongoDB 中優(yōu)勢有哪些?
-
面向文檔的存儲:以JSON格式的文檔保存數(shù)據(jù)。
-
任何屬性都可以建立索引。
-
復(fù)制以及高可擴(kuò)展性。
-
自動分片。
-
豐富的查詢功能。
-
快速的即時(shí)更新。
-
來自MongoDB的專業(yè)支持。
16. 分析器在 MongoDB 中的作用是什么?
MongoDB中包括一個(gè)可以顯示數(shù)據(jù)庫中每個(gè)操作性能特點(diǎn)的數(shù)據(jù)庫分析器。通過這個(gè)分析器你可以找到比預(yù)期慢的查詢(或?qū)懖僮?#xff09;;利用這一信息,比如,可以確定是否需要添加索引。
通俗的說分析器就是explain顯示每次操作性能特點(diǎn)的數(shù)據(jù)庫分析器。通過分析器可能查找比預(yù)期慢的操作。
17. MongoDB 中什么是文檔?
文檔由一組key value組成。文檔是動態(tài)模式,這意味著同一集合里的文檔不需要有相同的字段和結(jié)構(gòu)。在關(guān)系型數(shù)據(jù)庫中table中的每一條記錄相當(dāng)于MongoDB中的一個(gè)文檔。
18. MongoDB 中什么是 mongod?
mongod是處理MongoDB系統(tǒng)的主要進(jìn)程。它處理數(shù)據(jù)請求,管理數(shù)據(jù)存儲,和執(zhí)行后臺管理操作。當(dāng)我們運(yùn)行mongod命令意味著正在啟動MongoDB進(jìn)程,并且在后臺運(yùn)行。
19. MongoDB 中 mongod 參數(shù)都有哪些?
-
傳遞數(shù)據(jù)庫存儲路徑,默認(rèn)是“/data/db”
-
端口號默認(rèn)是“27017”
20. 什么是 mongo?
它是一個(gè)命令行工具,用于連接一個(gè)特定的mongod實(shí)例。當(dāng)我們沒有帶參數(shù)運(yùn)行mongo命令,它將使用默認(rèn)的端口號和localhost連接。