MongoDB 5.0 新功能

MongoDB 5.0 不久前已經發布了,有鑒於各繁體中文新聞稿各種神奇翻譯,還是自己讀英文版,順便記個筆記。
讓我們來看看有什麼更新項目吧!


版本號

  1. 一樣維持每年一次大版本號更新(1.0, 2.0, 3.0 這種)
  2. 小版本號約為一個季度一次(5.1, 5.2 5.3)
  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
2
3
4
5
{
"MemberCode":"TestMember01",
"Password": "pass12345",
"PhoneNumber": "09123456789"
}

所以通常會加密儲存

1
2
3
4
5
{
"MemberCode":"TestMember01",
"Password": "&^TUYGPI&*D",
"PhoneNumber": "&*TDEJEHGR"
}

MongoDB 4.2 企業版以後都有提供針對特定欄位進行加密,且可以選擇加密的方式等等。

這次強調的應該是在各家雲端平台間的互相支援,原本這個功能只能存在 Amazon's Key Management Service,現在也都支援 Azure Key VaultGoogle 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 層級會自動控制)像是:

  1. 會自動限制嘗試連線的數量
  2. 監控 connection pool,怕檢查狀態的頻繁程度會搞垮忙碌的資料庫
  3. 嘗試連線的伺服器現在會選擇更快、附載更低的,不再是隨機挑選一個資料庫

其實還有很多修改,這些都可以從下面的連結去看,有完整的內容

[1] 官方 PDF 文件
[2] 官網 Release Note(更詳細的實作)

  • 作者: MingYi Chou
  • 版權聲明: 轉載不用問,但請註明出處!本網誌均採用 BY-NC-SA 許可協議。