您好,登錄后才能下訂單哦!
MongoDB 3.2 版本說明(Release Notes for MongoDB 3.2)
英文原文:
https://docs.mongodb.org/master/release-notes/3.2/
2015年12月8日
MongoDB 3.2現在發布了。關鍵特性是將WiredTiger作為默認存儲引擎,復制選舉增強,集群中的config servers配置為復制集,readConcern,和文檔驗證。
OpsManager 2.0也發布了。查看Ops Manager文檔和Ops Manager版本說明獲取更多信息。
小版本發布(Minor Releases)
3.2.1 – 2016年1月12日
修復了錯誤:當復制集執行常規關閉,輔助副本成員可能會將特定已復制但還沒有應用的操作標記為已成功應用:SERVER-21868
在Windows版本使用WiredTiger提高insert負載性能:SERVER-20262
修復了塊移動期間長時間運行的事務:SERVER-21366
所有在3.2.1版本中關閉的問題
WiredTiger作為默認引擎(WiredTiger as Default)
從3.2版開始,MongoDB使用WiredTiger作為默認的存儲引擎。
為了指定MMAPv1存儲引擎,你必須以下面任一方式指定存儲設置:
在命令行使用--storageEngine選項:
mongod --storageEngine mmapv1
或者在配置文件中,使用storage.engine設置:
storage: engine: mmapv1
注意:
對于已經存在的部署,如果你不指定--storageEngine或者storage.engine設置,MongoDB 3.2可以自動決定用于在--dbpath或storage.dbPath中創建數據文件的存儲引擎。
如果指定--storageEngine或者storage.engine,如果dbPath包含不是指定的存儲引擎創建的數據文件mongod將不會啟動。
也可以參考:
Default Storage Engine Change
復制選舉增強(Replication Election Enhancements)
從MongoDB 3.2起,MongoDB減少了復制集故障切換時間,并加速了多個同時存在的主成員的監測。
作為增強的部分,MongoDB引入了第一版復制集協議。新的復制集將會默認使用protocolVersion: 1。之前版本的MongoDB使用該協議的版本0。
此外,MongoDB使用了新的replica set configuration選項electionTimeoutMillis。
electionTimeoutMillis以毫秒指定了用于檢測當一個復制集的主成員不可達時的時間限制。
electionTimeoutMillis只應用在使用replication protocol版本1時。
分片集群增強(Sharded Cluster Enhancements)
MongoDB 3.2對于配置服務器(config servers)放棄使用三個鏡像mongod實例。
而是,從3.2開始,分片集群的config servers可以部署為一個復制集。復制集config servers必須運行WiredTiger存儲引擎。
這個改變提高了訪問config servers的一致性,因為對于分片配置數據,MongoDB可以利用標準復制集讀寫協議。此外,這允許一個分片集群有多于3個config servers因為一個復制集可以多達50個成員。
對于更多信息,查看Config Servers。為了使用復制集config servers部署一個新的分片集群,查看Deploy a Sharded Cluster。
readConcern
MongoDB 3.2針對復制集和復制集分片引入了readConcern查詢選項。對于WiredTiger storage engine,readConcern選項允許客戶端對于它們的讀請求選擇一個隔離級別。你可以指定一個“majority”的readConcern來讀取已經寫入大多數節點的數據并且不能被回滾。默認,MongoDB使用一個“local”的readConcern返回當前的可用數據給查詢時刻的節點,即使數據還沒有被持久化到大多數節點并可能被回滾。使用MMAPv1 storage engine,你可能只指定一個“local”的readConcern。
readConcern需要針對MongoDB 3.2版本的MongoDB驅動更新。
只有使用protocol version 1的復制集支持“majority”讀確認(read concern)。運行版本0協議的復制集不支持“majority”讀確認。
對于更多關于readConcern,包括支持該選項的操作,查看Read Concern。
部分索引(Partial Indexes)
MongoDB 3.2提供了選項用于創建只索引匹配指定過濾表達式的文檔的索引。通過索引集合中文檔的子集,部分索引有更低的存儲需求并且對于索引創建和維護降低了性能消耗。你可以指定一個partialFilterExpression選項對于所有的MongoDB index types。
partialFilterExpression選項接受一個文檔作為指定條件,通過使用:
等值表達式(例如,field: value或使用$eq操作符),
$exists: true表達式,
$gt,$gte,$lt,$lte表達式,
$type表達式,
$and操作符只在最頂層
對于詳細信息,查看Partial Indexes。
文檔驗證(Document Validation)
從3.2開始,MongoDB提供了在更新和插入期間驗證文檔的能力。驗證規則基于每個集合指定。
為了在一個新的集合上指定文檔驗證,在db.createCollection()方法使用新的validator選項。為了添加文檔驗證到一個存在的集合,在collMod命令使用新的validator選項。對于更多信息,查看Document Validation。
為了查看一個集合的驗證規則,使用db.getCollectionInfos()方法。
下面的命令可以使用新的bypassDocumentValidation選項避開驗證每個操作:
applyOps命令
findAndModify命令和db.collection.findAndModify()方法
mapReduce命令和db.collection.mapReduce()方法
insert命令
update命令
$out對于aggregate命令和db.collection.aggregate()方法
對于已經啟用訪問控制的部署,你必需有bypassDocumentValidation行為。內置角色dbAdmin和restore提供該行為。
聚合框架增強(Aggregation Framework Enhancements)
MongoDB引入:
新的階段,累加器和表達式。
Availability of accumulator expressions在$project階段。
Performance improvements在分片集群。
新的聚合階段
階段 | 描述 | 語法 |
$sample | 隨機從輸入選擇N條文檔 | { $sample: { size: <positive integer> } } |
$indexStats | 返回關于索引使用的統計 | { $indexStats: { } } |
$lookup | 與另一個集合執行left outer join關聯 | { $lookup: { from: <collection to join>, localField: <fieldA>, foreignField: <fieldB>, as: <output array field> } } |
對$group階段新的累加器
累加器 | 描述 | 語法 |
$stdDevSamp | 累加標準偏差 | { $stdDevSamp: <array> } |
$stdDevPop | 累加流行標準偏差 | { $stdDevPop: <array> } |
新的聚合算術運算操作
操作 | 描述 | 語法 |
$sqrt | 計算平方根 | { $sqrt: <number> } |
$abs | 返回數字的絕對值 | { $abs: <number> } |
$log | 以指定基數計算數字的對數 | { $log: [ <number>, <base> ] } |
$log10 | 計算以10為底數的對數 | { $log10: <number> } |
$ln | 計算數字的自然對數 | { $ln: <number> } |
$pow | 計算數字的指定指數的冪 | { $pow: [ <number>, <exponent> ] } |
$exp | 計算指數為e的冪 | { exp: <number> } |
$trunc | 截斷數字為整數 | { $trunc: <number> } |
$ceil | 返回大于或等于指定數字的最小整數 | { $ceil: <number> } |
$floor | 返回小魚或等于指定數字的最大整數 | { floor: <number> } |
新的聚合數組操作
操作 | 描述 | 語法 |
$slice | 返回數組的子集 | { $slice: [ <array>, <n> ] } or { $slice: [ <array>, <position>, <n> ] } |
$arrayElemAt | 返回指定數組索引位置的元素 | { $arrayElemAt: [ <array>, <idx> ] } |
$concatArrays | 連接數組 | { $concatArrays: [ <array1>, <array2>, ... ] } |
$isArray | 判斷運算對象是否為數組 | { $isArray: [ <expression> ] } |
$filter | 查詢基于條件的數組的子集 | { $filter: { input: <array>, as: <string>, cond: <expression> } } |
累加器表達式可用性(Accumulator Expression Availability)
從3.2版開始,以下累加器表達式,之前只在$group階段可用,現在在$project階段也可用了:
$avg
$min
$max
$sum
$stdDevPop
$stdDevSamp
當用于$project階段時,這些累加器表達式可以接受:
單一參數:<accumulator> : <arg>
多個參數:<accumulator> : [ <arg1>, <arg2>, ... ]
一般增強(General Enhancements)
在MongoDB 3.2中,$project階段支持使用方括號[]直接創建新的數組列。例如,查看Project New Array Fields。
MongoDB 3.2對$geoNear階段引入minDistance選項。
$unwind階段不再對非數組操作數報錯。如果操作數不解析為數組但不缺失,為null或者一個空數組,$unwind認為操作數為單一元素數組。
$unwind階段可以:
通過在階段規則中指定一個新的選項includeArrayIndex在輸出中包含數組元素的索引。
通過在階段規則中指定一個新的選項preserveNullAndEmptyArrays輸出這些數組列缺失,null或者一個空數組的文檔。
為了支持這些新特性,$unwind現在可以采用另一種語法,查看$unwind詳細信息。
優化(Optimization)
索引可以覆蓋聚合操作。
MongoDB提高了在大的分片集群的管道的整體性能。
如果管道以對片鍵的精確$match開始,整個管道只運行在匹配的分片上。之前,管道會被拆分,合并的操作將會在主分片上執行。
對于運行在多個分片上的聚合操作,如果操作不需要運行在數據庫的主分片上,這些操作可以路由結果到任何分片來合并結果,避免數據庫的主分片過載。需要運行在數據庫的主分片上的聚合操作是$out階段和$lookup階段。
兼容性(Compatibility)
對于兼容性改變,查看Aggregation Compatibility Changes。
MongoDB工具增強(MongoDB Tools Enhancements)
mongodump和mongorestore使用新的--archive選項添加對歸檔文件和標準輸出/輸入流的支持。該增強允許通過網絡設備基于管道導出的數據流。例如,查看
mongodump to an Archive File和mongodump an Archive to Standard Output
Restore a Database from an Archive File和Restore a Database from Standard Input。
mongodump和mongorestore使用新的--gzip選項添加對壓縮數據導出的支持。該增強減少了對導出文件的存儲空間。例如,查看:
Compress mongodump Output
Restore from Compressed Data。
加密存儲引擎(Encrypted Storage Engine)
企業版特性:
可在MongoDB企業版可用。
重要:
只對WiredTiger存儲引擎可用。
安靜加密,當聯合使用透明加密和好的保護相關帳號、密碼和加密密鑰的安全策略,可以幫助確保遵守安全和私有標準,包括HIPAA、PCI-DSS和FERPA。
MongoDB企業版3.2對WiredTiger存儲引擎引入了一個本地加密選項。這個特性允許MongoDB加密數據文件以致只有有解密密鑰的當事人可以解碼和讀取數據。更多詳細信息,查看Encrypted Storage Engine。
文本搜索增強(Text Search Enhancements)
文本索引版本3(text Index Version 3)
MongoDB 3.2引入了text index的版本3。索引的新版本的關鍵特性是:
提高了case insensitivity。
Diacritic insensitivity。
額外的delimiters for tokenization。
從MongoDB 3.2開始,版本3對于新的text索引為默認版本。
也可以查看:
Text Index Version 3 Compatibility
$text操作符增強($text Operator Enhancements)
$text操作符增加對如下支持:
case sensitive text search帶有新的$caseSensitive選項,和
diacritic sensitive text search帶有新的$diacriticSensitive選項。
對于更多信息和示例,查看$text操作符相關部分Case Insensitivity和Diacritic Insensitivity。
其他語言支持(Support for Additional Languages)
企業版特性:
只在MongoDB企業版可用。
從3.2版開始,MongoDB企業版提供了對以下語言的支持:Arabic,Farsi(尤其Dari和Iranian Persian方言),Urdu,簡體中文和繁體中文。
詳細信息,查看Text Search with Basis Technology Rosette Linguistics Platform。
新的存儲引擎
inMemory存儲引擎
企業版特性:
只在MongoDB企業版可用。
MongoDB企業版3.2提供了一個內存中的存儲引擎。除了一些元數據,內存中存儲引擎不維護任何磁盤數據。通過避免磁盤I/O,內存中的存儲引擎允許更可預見的數據庫操作延時。
警告:
當前處于beta階段。不能在產品中使用。
為了選擇這個存儲引擎,指定
inMemory對于--storageEngine選項或者storage.engine設置。
--dbpath。盡管內存中處理引擎不寫數據到文件系統,它維護在--dbpath小元數據文件和診斷數據以及構建大索引的臨時文件。
inMemory存儲引擎使用文檔級別鎖。對于更多細節,查看In-Memory Storage Engine。
ephemeralForTest存儲引擎(ephemeralForTest Storage Engine)
MongoDB 3.2提供了一個新的用于測試的存儲引擎。而不是一些元數據,用于測試的存儲引擎不維護任何磁盤數據,不需要在測試運行期間做清理。用于測試的存儲引擎是無支持的。
警告:
只對測試目的。不能在產品中使用。
為了選擇這個存儲引擎,指定
ephemeralForTest對于--storageEngine選項或者storage.engine設置。
--dbpath。盡管用于測試的存儲引擎不寫數據到文件系統,它在--dbpath中維護小的元數據文件。
ephemeralForTest存儲引擎使用集合級別的鎖。
一般增強(General Enhancements)
位測試查詢操作符(Bit Test Query Operators)
MongoDB 3.2提供了新的查詢操作符用于測試位值:
$bitsAllSet
$bitsAllClear
$bitsAnySet
$bitsAnyClear
SpiderMonkey JavaScript引擎(SpiderMonkey JavaScript Engine)
MongoDB 3.2對于mongo shell和mongod server使用SpiderMonkey作為JavaScript引擎。
SpiderMonkey提供了對其他平臺的支持并且有一個提高的內存管理模型。
這個改變影響了所有的JavaScript行為包括命令mapReduce,group,和查詢操作符$where;然而,這個改變應該是對用戶完全透明的。
也可以查看:
SpiderMonkey Compatibility Changes
mongo Shell和CRUD API(mongo Shell and CRUD API)
為了提供和MongoDB驅動的CRUD(Create/Read/Update/Delete)API的一致性,mongo shell引入了其他CRUD方法與驅動的CRUD API保持一致:
新的API | 描述 |
db.collection.bulkWrite() | 等價于初始化Bulk()操作構造器,使用Bulk方法來添加操作和運行Bulk.execute()來執行操作。 MongoDB 3.2放棄了Bulk()和它的相關方法。 |
db.collection.deleteMany() | 等價于db.collection.remove()。 |
db.collection.deleteOne() | 等價于db.collection.remove()帶有justOne設置為true;例如: db.collection.remove( <query>, true ) 或 db.collection.remove( <query>, { justOne: true } )。 |
db.collection.findOneAndDelete() | 等價于db.collection.findAndModify()方法帶有remove設置為true。 |
db.collection.findOneAndReplace() | 等價于db.collection.findAndModify()方法帶有update設置為一個替代文檔。 |
db.collection.findOneAndUpdate() | 等價于db.collection.findAndzModify()方法帶有update設置為一個使用update操作符指定修改的文檔。 |
db.collection.insertMany() | 等價于db.collection.insert()方法帶有一個文檔數組作為參數。 |
db.collection.insertOne() | 等價于db.collection.insert()方法帶有一個文檔作為參數。 |
db.collection.replaceOne() | 等價于db.collection.update( <query>, <update> )方法帶有一個替換文檔作為<update>參數。 |
db.collection.updateMany() | 等價于db.collection.update( <query>, <update>, { multi: true, ... })方法帶有使用update操作符和multi選項設置為true的指定修改的<update>文檔。 |
db.collection.updateOne() | 等價于db.collection.update( <query>, <update> )方法帶有使用update操作符指定修改的一個<update>文檔。 |
WiredTiger和fsyncLock(WiredTiger and fsyncLock)
從MongoDB 3.2開始,WiredTiger存儲引擎支持帶有lock選項的fsync命令或者mongo shell方法db.fsyncLock()。那就是,對于WiredTiger存儲引擎,這些操作可以保證數據文件不改變,確保創建備份一致性的目的。
放棄32位二進制文件(Deprecation of 32-bit Binaries)
從3.2版開始,32位二進制被放棄并且在將來的版本中不可用。
$type操作符接受字符串別名($type Operator Accepts String Aliases)
$type操作符對于BSON類型,除了與BSON類型相關的數字外,接受字符串別名。
explain()支持distinct()操作(explain() Support for distinct() Operation)
db.collection.explain()添加了對db.collection.distinct()方法的支持。對于更多信息,查看db.collection.explain()。
放棄HTTP界面(Deprecation of the HTTP Interface)
從3.2版開始,MongoDB放棄了它的HTTP界面。
地理空間優化(Geospatial Optimization)
MongoDB 3.2引入了2dsphere indexes版本3,在更精細的層次索引GeoJSON geometries。新版在更小的區域提高了2dsphere index查詢的性能。此外,對于2d indexes和2dsphere indexes,geoNear查詢的性能對于密集數據集已經提高。
也可以查看:
2dsphere Index Version 3 Compatibility
診斷數據捕獲(Diagnostic Data Capture)
為了讓MongoDB工程師促進MongoDB服務器行為的分析,MongoDB 3.2引入了診斷數據收集架構,以一定的時間間隔寫服務器統計信息到診斷文件。默認,該架構以1秒的間隔捕獲數據。為了修改該間隔,查看diagnosticDataCollectionPeriodMillis。
MongoDB在mongod實例--dbpath或storage.dbPath下創建了一個diagnostic.data目錄。診斷數據在目錄下存儲為文件。
診斷文件的最大大小使用diagnosticDataCollectionFileSizeMB配置,并且diagnostic.data目錄的最大大小使用diagnosticDataCollectionDirectorySizeMB配置。
對于捕獲間隔的默認值和最大大小被作為有用的數據提供給MongoDB工程師,對性能和存儲大小有最小影響。典型地,這些值只需要被MongoDB工程師為特定的診斷目的的請求而修改。
寫確認(Write Concern)
對于復制集使用protocolVersion: 1,輔助副本成員在寫入它們各自的磁盤journals后確認寫操作,忽略j選項。
對于復制集使用protocolVersdion: 1,w: “majority”意味著j: true。
使用j: true,MongoDB只會在請求數量的成員,包括主成員,已經寫入journal后返回。之前j: true在復制集中的寫確認只需要主成員寫入journal,忽略了w: <value>寫確認。
WiredTiger引擎的journalCommitInterval(journalCommitInterval for WiredTiger)
MongoDB 3.2對于WiredTiger存儲引擎增加了對指定journal提交間隔的支持。查看journalCommitInterval選項。在之前的版本中,選項只應用于MMAPv1存儲引擎。
對于相關的配置文件設置,MongoDB 3.2增加了storage.journal.commitIntervalMs設置和放棄了storage.mmapv1.journal.commitIntervalMs。放棄的storage.mmapv1.journal.commitIntervalMs設置作為對storage.journal.commitIntervalMs設置的別名。
影響兼容性的改變(Changes Affecting Compatibility)
一些MongoDB 3.2的改變可能影響兼容性并且可能需要用戶行動。對于詳細的兼容性改變的列表,查看Compatibility Changes in MongoDB 3.2。
升級過程(Upgrade Process)
查看Upgrade MongoDB to 3.2獲取完整的升級指南。
在3.2.1中的已知問題(Known Issues in 3.2.1)
在3.2.1版本中已知問題的列表:
當節點間的時鐘漂移大于electionTimeOut,客戶端可能發現新的主節點失敗:SERVER-21744。
fromMigrate標記不會在oplog中設置用于刪除:SERVER-21678
在一個3.2版mongo shell連接到一個3.0版mongos或者在一個3.0版mongo shell連接到一個3.0版mongos帶有read preference運行explain,帶有3.2版本的分片是不兼容的:SERVER-21661
connPoolStats命令的結果不再正確:SERVER-21597
ApplyOps后端索引創建可能會死鎖:SERVER-21583
對于protocolVersion 1的復制集使用w:majority寫的性能回歸:SERVER-21581
UNICODE感知文本處理邏輯(文本索引第3版)的性能回歸:SERVER-19936
在3.2.0中的已知問題(Known Issues in 3.2.0)
在3.2.0版本中已知問題的列表:
findAndModify操作不會被profiler捕獲:SERVER-21772
getMore命令不會設置“nreturned”操作計數器:SERVER-21750
當節點間的時鐘漂移大于electionTimeout,客戶端可能發現新的主節點失敗:SERVER-21744
fromMigrate標記不會在oplog中設置用于刪除:SERVER-21678
在一個3.2版mongo shell連接到一個3.0版mongos或者在一個3.0版mongo shell連接到一個3.0版mongos帶有read preference運行explain,帶有3.2版本的分片是不兼容的:SERVER-21661
connPoolStats命令的結果不再正確:SERVER-21597
ApplyOps后端索引創建可能會死鎖:SERVER-21583
對于protocolVersion 1的復制集使用w:majority寫的性能回歸:SERVER-21581
UNICODE感知文本處理邏輯(文本索引第3版)的性能回歸:SERVER-19936
在Windows下的WiredTiger引擎的插入工作負載中服務器性能回歸:SERVER-21792
下載(Download)
下載MongoDB 3.2,去到downloads page。
也可以查看:
All Third Party License Notices.
All JIRA issues resolved in 3.2.
其他資源(Additional Resources)
Get ready for MongoDB 3.2?Get our help.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。