内容提要
FerretDB是一个开源文档数据库,兼容MongoDB,支持Postgres和SQLite等后端。通过Docker本地运行FerretDB,开发者可以使用MongoDB的功能和命令。文章介绍了环境变量的设置、文档的插入与更新,以及如何将FerretDB部署到Fly.io以供生产使用,从而在Supabase项目中轻松集成MongoDB功能,避免供应商锁定。
延伸解读
FerretDB 如何桥接 MongoDB 与 Postgres
FerretDB 作为中间层,将 MongoDB 的文档操作转换为对 Postgres 的 SQL 查询。它把每个集合存储为 ferretdb 模式下的表,文档以 JSONB 格式保存。这意味着你可以在 Supabase 的 Postgres 数据库上直接使用 MongoDB 的语法和工具,而无需改变底层数据存储。这种设计既保留了 MongoDB 的开发体验,又利用了 Postgres 的可靠性和 Supabase 的生态。
本地测试与生产部署的差异
文章演示了通过 Docker 在本地运行 FerretDB,并使用 mongosh 进行连接和操作。本地测试时,连接字符串指向 127.0.0.1。而生产部署到 Fly.io 时,需要创建 fly.toml 配置文件,设置环境变量 FERRETDB_POSTGRESQL_URL,并分配一个专用的 IPv4 地址。部署后,将连接字符串中的 127.0.0.1 替换为该 IP 地址即可。注意,分配 IPv4 是付费功能,但可以在计费周期结束前释放以避免费用。
在 Supabase 中查看 FerretDB 数据
由于 FerretDB 将数据存储在 Postgres 的 ferretdb 模式中,你可以直接在 Supabase 仪表板的表编辑器里查看这些数据。每个文档对应表中的一行,内容以 JSONB 格式呈现。这为开发者提供了便利:既可以使用 MongoDB 的 API 进行读写,又可以通过 Supabase 的界面直观地检查数据,方便调试和验证。
避免供应商锁定的实际意义
FerretDB 允许你在 Postgres 上运行 MongoDB 工作负载,这意味着你不再被锁定在特定的 MongoDB 托管服务中。你可以自由选择 Postgres 作为后端,并利用 Supabase 提供的数据库管理、认证、存储等功能。同时,由于数据存储在标准的 Postgres 中,你可以使用 SQL 进行复杂查询或与其他工具集成,保持对数据架构的完全控制。
Q&A
FerretDB是什么?
FerretDB是一个开源文档数据库,兼容MongoDB,支持Postgres和SQLite等后端。
如何在本地使用Docker运行FerretDB?
可以通过Docker运行FerretDB,只需设置FERRETDB_POSTGRESQL_URL环境变量并运行相应的Docker命令。
如何将FerretDB部署到Fly.io?
创建fly.toml文件并设置相关配置,然后使用flyctl命令进行部署。
FerretDB如何与Supabase项目集成?
FerretDB允许在Supabase项目中轻松集成MongoDB功能,避免供应商锁定。
如何使用mongosh测试FerretDB的连接?
可以通过mongosh连接到FerretDB,使用MongoDB URI进行测试。
FerretDB支持哪些MongoDB操作?
FerretDB支持多种MongoDB操作,包括插入、更新和查询文档。