介紹一個MongoDB的替代方案

qing_yun發表於2023-09-18

前陣子有朋友在公眾號上留言說他們在搞安全可控替代方案,不過對於MongoDB,目前找不到替代的國產化或者開源產品,問我能不能給他介紹一個。我問他為什麼要替換MongoDB,他說因為MongoDB更改了開源協議後,他們的一些商用專案怕受影響,因此需要找到替代方案。正是因為SSPL授權協議的問題,有不少使用者都有了替換MongoDB的想法。

實際上對於MongoDB的替代,我們也是很頭疼的,雖然PostgreSQL、Oceanbase等資料庫中也能夠支援一些簡單的文件資料儲存與訪問,不過功能上差得太遠。特別是對於一些MongoDB功能上用得很深的應用,想要找到一個可以較為平穩替代的資料庫產品,目前來看,除了目前正在被替換的Oracle 23C之外,恐怕也找不到太好的。

MongoDB從最初的簡單的文件資料庫發展到目前,已經迭代了數個大版本,功能上也已經在向通用資料庫的道路上走了很遠了。目前的MongoDB已經是一個功能十分強大的多模資料庫了。MongoDB目前集文件資料庫、空間資料庫、時序資料庫、向量資料庫、搜尋引擎於一身,同時支援簡單的事務,甚至可以用一個資料庫獨立搞定 一個業務系統。如果應用使用MongoDB很深,確實是很難替換的。

不過對於大多數使用者來說,MongoDB僅僅作為簡單的文件資料庫使用的,儲存一些文件、日誌、配置資料等。如果這樣的話,還是可以找到一些解決方案的。開源專案FerretDB/FerretDB就是這樣一個解決方案。如果你的應用僅僅是把MongoDB當成一個文件資料庫來使用,應用也比較簡單,那麼FerretDB可能會成為你替換MongoDB的一個比較好的選擇。

FerretDB被其建立者描述為“真正的開源MongoDB替代品,能夠執行文件資料庫工作負載的所有基本功能”。FerretDB的開源協議是Apache 2.0,可以在github上下載,自從2021年開源依賴,目前已經迭代了40多個版本。FerretDB是一個開源代理,它將MongoDB 6.0+線協議查詢轉換為SQL,並可以在後端使用PostgreSQL/SQL LITE等後端儲存作為資料庫引擎。SAP HANA的支援目前是ALPHA狀態,按照FerretDB的迭代速度,應該在幾個月內釋出正式支援。

FerretDB與MongoDB驅動程式和工具相容,因此很多使用MongoDB的應用程式不需要做修改就能夠用FerretDB+PostgreSQL的方式直接替代了

目前FerretDB的官網提供了Docker 映象、RPM 和 DEB 包的下載。並且今後將會提供Windows環境、macOS的安裝包。目前官網可下載的版本是1.19.0,而在Git上可以下載到最新的1.10的原始碼。

ferretdb支援一些簡單的mongodb的特性:支援嵌入式資料模型;支援索引,可以加快查詢速度,並且可以包含嵌入文件和陣列中的鍵;支援讀寫操作(CRUD)以及聚合、地理空間、文字搜尋等查詢;支援JSON資料模型和動態模式(以BSON二進位制模式儲存);支援多種程式語言的驅動程式和工具。

不過FerretDB僅僅是一個MongoDB的文件資料庫功能的替代方案,還存在很多侷限性,如果你的應用使用到了MongoDB的一些高階特性,那麼就不能jiandan的替代了。比如:不支援MongoDB的事務特性,也就是可以在多個文件或者集合上執行原子性的操作;不支援MongoDB的更改流特性(監聽集合或者資料庫上的資料變化事件);不支援MongoDB的地理空間索引和查詢特性(在地理座標或者形狀上進行索引和查詢);不支援MongoDB的全文搜尋特性(在文件中的文字欄位上進行基於詞語或者短語的搜尋);不支援MongoDB的圖形處理特性(在文件之間建立關係並進行圖形遍歷和分析)。

FerretDB可以算是一個PG資料庫的MongoDB代理,是PG資料庫生態的一個十分有益的補充,這些年因為開源協議的友好性,PG生態的發展十分迅速。對於PG生態的資料庫廠商,那麼將這個開源專案整合到自己的國產資料庫中,是對產品十分好的補充。

來自 “ 白鱔的洞穴 ”, 原文作者:白鱔;原文連結:https://mp.weixin.qq.com/s/37_evaZ2lZQBcaiiKSymNA,如有侵權,請聯絡管理員刪除。

相關文章