3分鐘看完MongoDB3.6新特性
- 2020 年 1 月 6 日
- 筆記
<div align=center>

</div> </br>
3分鐘看完MongoDB3.6新特性
</br>
Default Bind to Localhost
3.6版本起,默認使用localhost(127.0.0.1),多個ip使用逗號分隔:localhost,198.51.100.1 除去部分2.6 RPM安裝包是本地外,其餘版本默認是All interfaces.
</br>
Authentication Restrictions
3.6版本起,新增authenticationRestrictions參數用於將資料庫用戶連接限制為指定的IP地址,請將authenticationRestrictions參數添加到以下內容: Commands Methods createUser db.createUser() updateUser db.updateUser() createRole db.createRole() updateRole db.updateRole()
</br>
其他安全性增強功能
在使用TLS / SSL加密時,添加了opensslCipherConfig參數來控制OpenSSL密碼。 如果啟用了身份驗證,則只能針對您創建的游標發出getMore。 添加了convertToCapped操作來恢復角色。 </br>
Change Streams
MongoDB 3.6支援使用副本集或分片使用Change Streams。必須是複製協議版本1,且WT存儲引擎。
Change Streams允許應用程式實時了解到數據的更改,而不會增加tail oplog的複雜性和風險。 應用程式可以使用Change Streams來訂閱集合上的所有數據更改,並立即響應這些更改。
您可以使用db.collection.watch()方法從任何3.6系列驅動程式打開更改流。 有關使用的完整說明,請參閱您的首選驅動程式的文檔。
使用Change Streams必須開啟3.6版本特性參數featureCompatibilityVersion see https://docs.mongodb.com/master/reference/command/setFeatureCompatibilityVersion/#view-fcv
當數據到達集群中majority成員時,Change Streams才會立即通知客戶端響應這些更改。 在開啟許可權的集群中,應用只能夠使用Change Streams訪問有許可權的庫和集合。 cursor = db.inventory.watch() document = next(cursor) </br>
Lookup Full Document for Update Operations
full_document來看完整而非增量的版本 cursor = db.inventory.watch(full_document='updateLookup') document = next(cursor) Resume a Change Stream resume_token = document.get("_id") cursor = db.inventory.watch(resume_after=resume_token) document = next(cursor) </br>
Causal Consistency
需要客戶端使用MongoDB driver 3.6版本,以及需要資料庫開啟3.6特性參數featureCompatibilityVersion
</br>
Retryable Writes
重試只會重試1次,。對於可重試寫入,MongoDB驅動程式會在遇到網路錯誤或遇到副本集故障轉移時自動重試這些操作,在此期間副本集沒有primary。 限制: 1.只有副本集和shard可用 2.資料庫要求WT或in-memory存儲引擎 3.需要客戶端使用MongoDB driver 3.6版本,以及需要,開啟3.6特性參數featureCompatibilityVersion。 4.writeconcern必須配置,i.e{w:0}不可用。 5.由於重試嘗試只進行一次,可重試功能可以幫助解決暫時的網路錯誤,但不能解決持久的網路錯誤。 6.驅動程式將等待serverSelectionTimeoutMS秒,以在重試之前確定新的主節點。 可重試功能不會處理故障轉移期超過serverSelectionTimeoutMS的情況。
注意:如果客戶端應用程式在發出寫入操作後暫時無法響應localLogicalSessionTimeoutMinutes,則當客戶端應用程式開始響應(不重新啟動)時,寫入操作可能會重試並重新應用。
</br>
serverstatus
serverStatus新增 logicalSessionRecordCache項. </br>
JSON Schema
MongoDB 3.6添加了$ jsonSchema操作符來支援使用JSON Schema進行文檔驗證。 有關詳細資訊,請參閱$ jsonSchema。 </br>
Replica Sets
棄用副本集協議版本0(pv0)。 添加了replSetResizeOplog命令來動態調整副本集成員的oplog的大小。適用於運行WiredTiger存儲引擎的實例。 添加了catchUpTakeoverDelayMillis配置選項,指定節點在發起選舉之前等待的時間,默認30秒。 對於使用協議版本1(pv1)的副本集,如果仲裁人發現與候選人有相同或更高優先順序的節點在,他們將在選舉中投票反對票。 添加oplogInitialFindMaxSeconds參數來調整副本集的成員在數據同步期間其find命令等待多久。默認60s 增加了waitForSecondaryBeforeNoopWriteMS參數,以指定如果afterClusterTime大於oplog的最近應用時間,則secondary伺服器必須等待多長時間。默認10毫秒
</br>
Sharded Clusters
為mongos添加了ShardingTaskExecutorPoolMaxConnecting參數,以控制mongos將連接添加到mongod實例的速率。默認是2,僅對mongos有效 添加了orphanCleanupDelaySecs,它確定從源分片中刪除遷移塊之前的最小延遲。 現在可以對config資料庫中的config.system.sessions集合進行分片。 </br>
Indexes
索引可以覆蓋嵌套文檔中欄位的查詢。 如果索引跟蹤到哪個欄位使其成為多鍵,則多鍵索引可以覆蓋對非數組鍵的查詢。 創建索引時,不能將*指定為索引的名稱。 </br>
listdatabase
db.adminCommand( { listDatabases: 1, nameOnly: true} ) 添加了nameOnly執行命令時不會加鎖,而不添加的話會請求庫級鎖。 db.adminCommand( { listDatabases: 1, filter: { "name": /^rep/ } } ) filter會過濾想看的資料庫,支援正則表達式 修改了validate命令和db.collection.validate()方法的行為,只有WiredTiger存儲引擎強制執行檢查點,將所有記憶體中的數據刷新到磁碟,然後驗證磁碟上的數據。 • The <database>.system.profile entry for update and delete contains the entire update/delete document applied to the named collection. </br>
dropDatabase
dropDatabase命令會等待drop完所有集合的命令傳播到大部分副本集成員後執行。 對於在副本集和分片集群上運行的命令,響應文檔包括operationTime和$ clusterTime。
</br>
Read Concern
新增available,對於非分片集群,「local」和「available」行為是相同的。 對於分片群集,「available」提供了對分區的更大容忍度,但如果分片正在進行塊遷移,則可能會返回孤立文檔。
</br>
總結
</br> MongoDB3.6的諸多新特性中,限於時間和篇幅原因未能在本文全部闡述,可以看出多種新特性在存儲引擎上的選擇都要求使用WiredTiger存儲引擎,該存儲引擎也是MongoDB3.0版本起開始支援,MongoDB3.2版本起默認的存儲引擎。多種新特性中,最讓我感到開心的是動態調整oplog大小,這個對於傳統oplog擴容來說,方便了非常之多,停機調整oplog大小的時代即將終結。由於編寫時間也很倉促,文中難免會出現一些錯誤或者不準確的地方,不妥之處懇請讀者批評指正。 喜歡的讀者可以點個贊來個關注,您的讚美和關注是對筆者繼續發文的最大鼓勵與支援!


