1. 程式人生 > >MongoDB3.6新特性深入理解

MongoDB3.6新特性深入理解



深入理解MongoDB3.6新特性

Default Bind to Localhost

3.6版本起,預設使用localhost(127.0.0.1),多個ip使用逗號分隔:localhost,198.51.100.1
除去部分2.6 RPM安裝包是本地外,其餘版本預設是All interfaces.


Authentication Restrictions

3.6版本起,新增authenticationRestrictions引數用於將資料庫使用者連線限制為指定的IP地址,請將authenticationRestrictions引數新增到以下內容:
Commands Methods
createUser db.createUser()
updateUser db.updateUser()
createRole db.createRole()
updateRole db.updateRole()


其他安全性增強功能

在使用TLS / SSL加密時,添加了opensslCipherConfig引數來控制OpenSSL密碼。
如果啟用了身份驗證,則只能針對您建立的遊標發出getMore。
添加了convertToCapped操作來恢復角色。


Change Streams

MongoDB 3.6支援使用副本集或分片使用Change Streams。必須是複製協議版本1,且WT儲存引擎。

Change Streams允許應用程式實時瞭解到資料的更改,而不會增加tail oplog的複雜性和風險。 應用程式可以使用Change Streams來訂閱集合上的所有資料更改,並立即響應這些更改。

您可以使用db.collection.watch()方法從任何3.6系列驅動程式開啟更改流。 有關使用的完整說明,請參閱您的首選驅動程式的文件。

當資料到達叢集中majority成員時,Change Streams才會立即通知客戶端響應這些更改。
在開啟許可權的叢集中,應用只能夠使用Change Streams訪問有許可權的庫和集合。
cursor = db.inventory.watch()
document = next(cursor)


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)


Causal Consistency

需要客戶端使用MongoDB driver 3.6版本,以及需要資料庫開啟3.6特性引數featureCompatibilityVersion


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,則當客戶端應用程式開始響應(不重新啟動)時,寫入操作可能會重試並重新應用。


serverstatus

serverStatus新增 logicalSessionRecordCache項.


JSON Schema

MongoDB 3.6添加了$ jsonSchema操作符來支援使用JSON Schema進行文件驗證。 有關詳細資訊,請參閱$ jsonSchema。


Replica Sets

棄用副本集協議版本0(pv0)。
添加了replSetResizeOplog命令來動態調整副本整合員的oplog的大小。適用於執行WiredTiger儲存引擎的例項。
添加了catchUpTakeoverDelayMillis配置選項,指定節點在發起選舉之前等待的時間,預設30秒。
對於使用協議版本1(pv1)的副本集,如果仲裁人發現與候選人有相同或更高優先順序的節點在,他們將在選舉中投票反對票。
新增oplogInitialFindMaxSeconds引數來調整副本集的成員在資料同步期間其find命令等待多久。預設60s
增加了waitForSecondaryBeforeNoopWriteMS引數,以指定如果afterClusterTime大於oplog的最近應用時間,則secondary伺服器必須等待多長時間。預設10毫秒


Sharded Clusters

為mongos添加了ShardingTaskExecutorPoolMaxConnecting引數,以控制mongos將連線新增到mongod例項的速率。預設是2,僅對mongos有效
添加了orphanCleanupDelaySecs,它確定從源分片中刪除遷移塊之前的最小延遲。
現在可以對config資料庫中的config.system.sessions集合進行分片。


Indexes

索引可以覆蓋巢狀文件中欄位的查詢。
如果索引跟蹤到哪個欄位使其成為多鍵,則多鍵索引可以覆蓋對非陣列鍵的查詢。
建立索引時,不能將*指定為索引的名稱。


listdatabase

db.adminCommand( { listDatabases: 1, nameOnly: true} ) 添加了nameOnly執行命令時不會加鎖,而不新增的話會請求庫級鎖。
db.adminCommand( { listDatabases: 1, filter: { "name": /^rep/ } } ) filter會過濾想看的資料庫,支援正則表示式
修改了validate命令和db.collection.validate()方法的行為,只有WiredTiger儲存引擎強制執行檢查點,將所有記憶體中的資料重新整理到磁碟,然後驗證磁碟上的資料。
• The .system.profile entry for update and delete contains the entire update/delete document applied to the named collection.


dropDatabase

dropDatabase命令會等待drop完所有集合的命令傳播到大部分副本整合員後執行。
對於在副本集和分片叢集上執行的命令,響應文件包括operationTime和$ clusterTime。


Read Concern

新增available,對於非分片叢集,“local”和“available”行為是相同的。 對於分片群集,“available”提供了對分割槽的更大容忍度,但如果分片正在進行塊遷移,則可能會返回孤立文件。

總結


MongoDB3.6的諸多新特性中,限於時間和篇幅原因未能在本文全部闡述,可以看出多種新特性在儲存引擎上的選擇都要求使用WiredTiger儲存引擎,該儲存引擎也是MongoDB3.0版本起開始支援,MongoDB3.2版本起預設的儲存引擎。多種新特性中,最讓我感到開心的是動態調整oplog大小,這個對於傳統oplog擴容來說,方便了非常之多,停機調整oplog大小的時代即將終結。由於編寫時間也很倉促,文中難免會出現一些錯誤或者不準確的地方,不妥之處懇請讀者批評指正。