MongoDB 5.0 不久前已經發布了,有鑒於各繁體中文新聞稿各種神奇翻譯,還是自己讀英文版,順便記個筆記。
讓我們來看看有什麼更新項目吧!
–
版本號
- 一樣維持每年一次大版本號更新(1.0, 2.0, 3.0 這種)
- 小版本號約為一個季度一次(5.1, 5.2 5.3)
- BUG修正小版號則會隨時發布(5.1.1, 5.1.2)
–
API 版本控制
現在可以指定你的 Application 要使用哪種版本的 MongoDB API。
這個功能一部分源自於上面版本號的更新,現在 MongoDB 更新速度更快,也代表使用 MongoDB 的 Application 需要更頻繁更新,這會讓開發者或者穩定的營運面很棘手,要去修改穩定或者沒問題的程式碼是有很大的風險的。於是這次 5.0 版本官方定義了常用的功能和指令,讓使用者能夠自行決定使用其版本,而這些都不會隨著資料庫版本更新而受到影響,官方是號稱長達數年(years)。
另一個好處就是新開發功能可以直接指定使用新版本DB上。
即時重新分片(Resharding)
現在可以在資料庫不停止服務的情況下,重新改變 shard key
。
官方是號稱可以這樣做啦!但我是絕對沒有勇氣在線上環境執行這個指令的,且 shard key 的改變意味著設計與使用方式不對,可能不緊緊是 DB 的問題,連 application scenario 也需要一併調整,anyway,等待其他勇者反應這功能使用起來遇到什麼問題了。唯一想到的好處就是測試開發階段,能夠更快的測試 shard key 設計的驗證。
資料欄位等級加密 (Client-side field level encryption)
其實這不是新功能,這個在 4.2 以後的企業版本都有提供這個功能。這邊簡單舉例,假設有一個會員資料功能,通常會員密碼都是加密儲存在資料庫中,就會需要特別在 Application 層級執行加密。
這樣會讓機敏資料或者個資外洩給維護者
1 | { |
所以通常會加密儲存
1 | { |
MongoDB 4.2 企業版以後都有提供針對特定欄位進行加密,且可以選擇加密的方式等等。
這次強調的應該是在各家雲端平台間的互相支援,原本這個功能只能存在 Amazon's Key Management Service
,現在也都支援 Azure Key Vault
和 Google Cloud KMS
。除此之外,資料以及 Key store 可以分別存放於不同平台,也能夠互相支援了。
支援時間序列功能
這個算是我比較期待的項目了!MongoDB 觸手終於伸向時間序列資料庫(Time series database)。
官方是說透過此功能的資料能夠優化查詢、資料儲存壓縮,性能更好。建立 Collection 時,必須指定其中一個欄位為時間序列屬性,這樣該 Collection 的 type 就是 timeseries 類別了。
詳細使用以及效能測試,最近應該會發篇文章來玩玩看這功能。
MongoShell
陪伴我們已久的mongo
在 5.0 之後有了新的取代者,就是 mongosh
(Mongo shell),簡單來說就是更強大的介面功能、指令優化、使用者體驗和 intelligent auto-complete 功能。
mongo
未來將會被移除,不過還沒有提到是會多久,所以距離真正移除應該還有很長一段路。
資料結構驗證
這個也算是我期待但是又怕受傷害的功能,他能夠提供 schema 的驗證,例如寫入資料時,可以驗證結構對不對,某些欄位應該長甚麼樣(可搭配REGEX),算是一個使用的防護機制。畢竟任意資料結構都能寫入,對於未來讀取可能是一個潛在隱憂,而我最擔心的就是會影響多少的寫入效能了XD
C# driver
歡呼~對於 C# driver 的我來說無疑是一大福音,官方聲稱效能更好,且有更多 aggregation pipeline 相關的功能了~(雖然都已經改用 lua取代..)
Connection pool 優化
連線自動處理機制得到一些優化(這邊提到都是 driver 層級會自動控制)像是:
- 會自動限制嘗試連線的數量
- 監控 connection pool,怕檢查狀態的頻繁程度會搞垮忙碌的資料庫
- 嘗試連線的伺服器現在會選擇更快、附載更低的,不再是隨機挑選一個資料庫
–
其實還有很多修改,這些都可以從下面的連結去看,有完整的內容
–
[1] 官方 PDF 文件
[2] 官網 Release Note(更詳細的實作)