FerretDB 0.1 發布,基於 PostgreSQL DBMS 的 MongoDB 實作

FerretDB 0.1專案(以前的MangoDB)版本已經發布,讓您在不更改應用程式程式碼的情況下用PostgreSQL取代以文件為導向的DBMS MongoDB。 FerretDB 實作為代理伺服器,它將對 MangoDB 的呼叫轉換為對 PostgreSQL 的 SQL 查詢,從而允許 PostgreSQL 用作實際儲存。 該程式碼是用 Go 編寫的,並根據 Apache 2.0 許可證分發。

由於MongoDB 過渡到專有SSPL 許可證,可能會出現遷移的需要,該許可證基於AGPLv3 許可證,但不開放,因為它包含在SSPL 許可證下交付的歧視性要求,不僅要交付應用程式程式碼本身,而且還要交付應用程式程式碼本身。提供雲端服務涉及的所有元件的原始碼。

FerretDB的目標受眾是在應用程式中不使用MongoDB高級功能,但希望使用完全開放的軟體堆疊的使用者。 在目前的開發階段,FerretDB 仍然只支援典型應用程式中最常用的部分 MongoDB 功能。 未來,他們計劃實現與 MongoDB 驅動程式的完全相容,並提供使用 FerretDB 作為 MongoDB 透明替代品的能力。

讓我們回想一下,MongoDB 在以鍵/值格式操作資料的快速且可擴展的系統與功能強大且易於制定查詢的關係 DBMS 之間佔據著一席之地。 MongoDB 支援以類似 JSON 的格式存儲文檔,具有相當靈活的語言來生成查詢,可以為各種存儲屬性創建索引,有效地提供大型二進制對象的存儲,支持記錄更改和向數據庫添加數據的操作,可以按照Map/Reduce範式工作,支援容錯配置的複製和建置。

FerretDB 0.1.0 的發布完全重新設計了從 PostgreSQL 檢索資料的方法。 以前,對於每個傳入的 MongoDB 請求,都會使用用於處理 JSON 格式並在 PostgreSQL 端過濾結果的函數,向 PostgreSQL 產生一個 SQL 查詢。 由於 PostgreSQL 和 MongoDB json 函數的語意差異,在比較和排序不同類型時存在行為差異。 為了解決這個問題,現在從 PostgreSQL 中冗餘地獲取數據,並在 FerretDB 端過濾結果,這使得在大多數情況下複製 MongoDB 的行為成為可能。

提高相容性的代價是效能下降,在未來的版本中,他們希望透過在 FerretDB 端選擇性地過濾僅存在行為差異的查詢來彌補這一點。 例如,查詢「db.collection.find({_id: 'some-id-value'})」可以完全在 PostgreSQL 中處理。 此專案現階段開發的首要目標是實現與 MongoDB 的相容,效能暫時退居次要地位。 新版本的功能變更包括對所有位元運算子、「$eq」比較運算子以及「$elemMatch」和「$bitsAllClear」運算子的支援。

來源: opennet.ru

添加評論