我們很高興地宣布正式發布DocumentDB——一個開源文檔數據庫平臺,以及基于 vCore、基于 PostgreSQL 構建的 Azure Cosmos DB for MongoDB 的引擎。
過去,NoSQL 數據庫提供云專用解決方案,而沒有通用的互操作性標準。這導致對可互操作、可移植且完全支持生產就緒的文檔數據存儲本地實例的需求不斷增長。我們還認為,如果能有一個 NoSQL 數據庫標準,以便在選擇和切換 NoSQL 數據庫時提供更大的靈活性,那就太好了。此外,過去十年,PostgreSQL 在開發者社區中的受歡迎程度呈爆炸式增長。因此,為了滿足社區對 NoSQL 數據庫的需求和 PostgreSQL 的普遍采用,我們推出了 DocumentDB — 一個完全允許的開源文檔數據存儲平臺,它基于強大的 PostgreSQL 引擎構建。
使命
DocumentDB 的使命是為開發者社區提供一個使用 PostgreSQL 實現的 NoSQL 數據存儲,并完全了解引擎的架構和實現。數據庫引擎的所有核心組件(從 CRUD(創建、讀取、更新、刪除)操作到索引和向量搜索功能)都是公開的。此外,PostgreSQL 憑借其不斷發展的功能集和豐富的擴展生態系統,人氣迅速飆升。我們決定推出 DocumentDB——一個由 PostgreSQL 提供支持的完全開源平臺,可以在其上構建端到端的文檔數據庫體驗,以滿足社區對 NoSQL 數據庫的需求。
許可
為了秉承真正的開源精神,該項目采用了最寬松的 MIT 許可證,開發人員可以不受限制地將項目納入他們自己的新解決方案和現有解決方案中。沒有商業許可費、沒有使用或分發限制,也沒有花招。雖然我們始終歡迎和鼓勵對項目做出貢獻,但并不要求用戶將他們的定制、貢獻和增強功能提交給項目。MIT 許可證保證完全自由地分叉存儲庫、使用和分發,沒有任何義務。
開源標準
DocumentDB 是該項目更宏偉使命的首次實現,該使命旨在為開源文檔數據庫創建標準,就像 ANSI(美國國家標準協會)的關系數據庫 SQL 標準一樣。NoSQL 標準的創建將在未來提高 NoSQL 引擎的兼容性和互操作性。該標準背后的動機是盡量減少 NoSQL 數據庫實現之間面向公眾的 API(應用程序編程接口)和引擎基礎的差異。總的來說,這將有助于改善開發人員在加入文檔數據庫時的體驗,更重要的是,在從一個數據庫切換到另一個數據庫時。
架構
該項目由兩個主要組件組成,它們共同支持文檔操作:
pg_documentdb_core — 一個自定義的 PostgreSQL 擴展,針對 Postgres 中的 BSON(二進制 JavaScript 對象表示法)數據類型支持進行了優化。
pg_documentdb_api — 實現 CRUD 操作、查詢功能和索引管理的數據平面。
對于貢獻者
堆棧底部是pg_documentdb_core層 - 一個完全自主開發和定制的 Postgres 擴展,用于優化對 BSON 數據類型的支持。此擴展提供以下功能:
能夠在數據庫引擎的 Postgres 層中解析和操作 BSON 文檔,以及 BSON 文檔內嵌套的各個級別。
能夠索引 BSON 文檔中的字段 - 包括單字段索引、多鍵索引、復合索引(以優化多個字段上的查詢過濾條件)、文本索引以及利用 PostGIS 擴展功能的地理空間索引。
能夠執行由 pg_vector Postgres 擴展提供支持的向量搜索查詢。
功能齊全的身份驗證機制,包括 SCRAM(加鹽挑戰響應身份驗證機制)身份驗證。
這些位于堆棧底部的功能將作為構建端到端 NoSQL 數據庫用戶體驗的基礎。可在此堆棧頂部構建協議轉換層,以將所選的入站 NoSQL 數據庫協議轉換為底層 Postgres 協議。
對于用戶
尋找現成 NoSQL 數據庫的用戶可以利用 FerretDB 中的現有解決方案 — 由 DocumentDB 作為支持引擎。FerretDB 是一個流行的開源文檔數據存儲,其最新版本 ( FerretDB 2.0 ) 由 DocumentDB 支撐。雖然用戶可以通過 Postgres 與 DocumentDB 交互,但 FerretDB 2.0 提供了一個具有文檔數據庫協議的接口。FerretDB 還擁有同樣寬松的 Apache 許可證,并且在 Postgres 和 NoSQL 社區中都占有重要地位。