介紹一個MongoDB的替代方案
前陣子有朋友在公眾號上留言說他們在搞安全可控替代方案,不過對於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,如有侵權,請聯絡管理員刪除。
相關文章
- MongoDB shell 介紹MongoDB
- 介紹一個 Windows 10 資源管理器的替代工具 - Explorer++Windows
- MongoDB Oplog中的欄位介紹MongoDB
- 介紹一個功能強大的 Visual Studio Code 擴充套件 - Rest Client,能部分替代 Postman套件RESTclientPostman
- MangoDB:MongoDB的開源替代MongoDB
- MongoDB基本介紹與安裝(1)MongoDB
- MongoDB三種聚合命令用法介紹MongoDB
- 容器管理的 9 個最佳 Docker 替代方案Docker
- 關於 top 工具的 6 個替代方案
- 介紹一種更方便的代理池實現方案
- 分散式事務解決方案(一)【介紹】分散式
- MongoDB 資料庫介紹及安裝MongoDB資料庫
- python 介紹一個很好用的函式Python函式
- 以太坊的擴容方案介紹
- 一種巧妙的drawable.xml替代方案XML
- 介紹一個請求庫 — Undici
- 【Flutter】 介紹一種通用的頁面路由設計方案Flutter路由
- [譯] JSX 的替代方案JS
- 介紹一個好用的 Laravel Menu 建構包Laravel
- 個人介紹
- 2023年最佳Aspera替代方案,選擇適合的Aspera替代方案
- 介紹一個軟體開發工具
- MongoDB資料庫建立的基本規範簡要介紹MongoDB資料庫
- 介紹一個功能豐富的 Java 工具包Java
- Spring Boot下的一個DDD案例原始碼介紹Spring Boot原始碼
- MongoDB入門(介紹、安裝、增刪改查)MongoDB
- Redis和MongoDB優缺點介紹!Python學習RedisMongoDBPython
- MongoDB Sharding ChunkSize大小選擇優缺點介紹MongoDB
- MongoDB Sharding Balancer介紹和設定方法舉例MongoDB
- Chapar :Golang的Postman替代方案GolangPostman
- 介紹一個.Net遠端日誌元件元件
- 介紹一個新庫: Norns.Urd.HttpClientHTTPclient
- Docker 介紹 一Docker
- 一、 Fastdfs介紹AST
- NIO的介紹和JDK7下NIO的一個案例JDK
- 介紹一個免費的雲開發工具:Cloud ShellCloud
- 介紹幾個好用的工具類
- webpack 專案接入Vite的通用方案介紹(上)WebVite