娄MongoDB开源替代品-FerretDB
2022-06-28 10:24:59 阿炯

FerretDB(以前称为 MangoDB)的成立是为了成为 MongoDB 的开源替代品。FerretDB 是一个开源代理,将 MongoDB wire protocol 查询转换为 SQL —— 使用 PostgreSQL 作为数据库引擎。采用Go语言开发并在ApacheV2.0协议下授权。


FerretDB (previously MangoDB) was founded to become the de-facto open-source substitute to MongoDB. FerretDB is an open-source proxy, converting the MongoDB 5.0+ wire protocol queries to SQL - using PostgreSQL as a database engine.

为什么需要 FerretDB

MongoDB因与云厂商不可调和的矛盾,将许可证更改为 SSPL - 使其无法用于许多开源和早期商业项目。大多数 MongoDB 用户不需要它所提供的许多高级功能;然而他们需要一个易于使用的开源数据库解决方案。FerretDB 想填补这一空白,将与 MongoDB 驱动程序兼容,并将努力作为 MongoDB 的替代品。

另外可以参考《开源公司抱团取暖-讨论如何在云厂商环境下生存》。

最新版本:0.4
目前 FerretDB 已于2022年6月下旬发布 0.4.0 版本,此版本增加了对 Tigris 后端的初步支持,计划在下一个版本中与 PostgreSQL 后端达到同等水平。其他更新内容如下:
新的功能
支持 $setOnInsert 字段更新运算符
支持 $unset 字段更新运算符
支持 $currentDate 字段更新运算符
支持数组查询
支持 $elemMatch 数组查询运算符
实现 getFreeMonitoringStatus 存根
实现 setFreeMonitoring 存根
实现 tigris 处理程序

修复错误
处理 buildinfo 和 buildInfo 命令
通过代理响应日志修复错误
修复标志的默认值
修复嵌入式数组查询错误

增强功能
数组比较替换
支持 getParameter 的 showDetails 、allParameters
使日志级别可配置
$currentDate 时间戳修复 DateTime 秒和毫秒错误

最新版本:1.0
经过数个月的开发,FerretDB 于2023年4月中旬已经达到生产可用了,FerretDB 希望将 MongoDB 数据库的工作负载带回其开源的本源,使 PostgreSQL 和其他数据库后端能够运行 MongoDB 工作负载,保留 MongoDB 现有生态所提供的机会:
在任何地方部署 + 保持对你的数据的控制
在基于云的项目中自由使用它
使用现有的 PostgreSQL 基础设施来运行 MongoDB 工作负载

GA 的主要功能补充
在这个 GA 版本中,FerretDB 现在支持 createIndexes 命令。这将使你能够指定你想要索引的字段,以及要使用的索引类型(例如,升序、降序等)。假设有一个 users 集合,包含几个字段,包括 "age"、"name" 和 "email",你想为 "age" 字段创建一个索引。现在可以运行下面的命令:
db.users.createIndex({ age: 1 })
这将在 "age" 字段上创建一个升序索引,这将加快对该字段进行过滤的任何查询。还添加了 dropIndexes 命令,它允许你从一个集合中删除索引。下面是一个例子:
db.users.dropIndex({ age: 1 })
这将从 "users" 集合中删除索引。

FerretDB 1.0 扩展了聚集管道的功能,除了在 $group 阶段内的 $sum 累加器外,还包括其他阶段,如 $unwind、 $limit 和 $skip。通过这些补充,可以对采集数据进行更精细的计算和操作。除了这些,还在 $collStats 聚合管道阶段增加了对 count 和 storageStats 字段的支持。为了帮助收集更多关于集合、数据库和服务器性能的信息,FerretDB 1.0 启用了对几个服务器命令的部分支持,包括 collStats、dbStats 和 dataSize。

要检索一个集合的统计数据,请使用 collStats 命令:
db.runCommand({ collStats: "users" })

如果是关于数据库的统计,运行下面的命令:
db.runCommand({ dbStats: 1 })

对于集合的总数据量,运行下面的命令:
db.runCommand({ dataSize: "<database>.<collection>" })

最新版本:2
经过与 Microsoft 一年多的密切合作,FerretDB 团队于2025年3月上旬正式发布了 FerretDB v2.0。这是一个基于 ApacheV2.0 许可证的高性能、完全开源的 MongoDB 替代方案。它利用最新的技术改进,为那些希望从 MongoDB 迁移的开发者提供了更快、更稳定的数据库解决方案。核心亮点如下:
引入 DocumentDB PostgreSQL 扩展
v2.0 的最大亮点之一是集成了 Microsoft 最新开源的 DocumentDB PostgreSQL 扩展。这一扩展使得 FerretDB 能够在 PostgreSQL 中实现 BSON(二进制 JSON)数据类型,并提供专门的查询操作,大幅提升了数据存储和查询性能。

超 20 倍的性能提升
借助 Microsoft DocumentDB 的优化,v2.0 在查询速度上实现了惊人的性能提升,最高达到了 20 倍。这为需要高性能数据处理的应用场景提供了有力支持。

更强的 MongoDB 兼容性
新版本在兼容性上也做了大量改进,能够更好地支持 MongoDB 应用的迁移。开发者无需大幅修改现有代码,即可平滑过渡到 FerretDB,提高系统的稳定性和可靠性。

支持向量搜索
v2.0 内置了向量搜索功能,这对于人工智能和机器学习应用来说尤为重要。它可以直接在数据库中执行先进的向量运算,进一步增强数据处理能力。

内置复制功能
为了确保高可用性,v2.0 现在集成了内置复制功能。这不仅降低了系统宕机的风险,还为企业级应用提供了更强的稳定性和数据冗余保障。

企业级支持
除了开源版本,FerretDB 还提供了订阅和咨询等企业级支持服务,帮助关键业务用户解决使用中的各种问题。

未来展望与开发路线图
FerretDB 团队计划在 3 月发布 FerretDB 2.1 版本,届时将进一步优化查询和聚合功能,特别是针对索引数据的优化。此外,未来版本还将改进可观测性,使调试和性能监控更加便捷。开发路线图中还包括更完善的会话管理和事务支持,以进一步增强数据库的稳定性和功能性。

FerretDB v2.0 的发布标志着一个重要的进步,它不仅为开发者提供了一个高性能、完全开源的 MongoDB 替代方案,还借助 Microsoft 的 DocumentDB PostgreSQL 扩展实现了显著的性能和兼容性提升。对于希望迁移 MongoDB 应用并追求更快查询速度和更高稳定性的用户来说,FerretDB 2.0 是一个极具吸引力的选择。同时,未来的 2.1 版本及其开发路线图也为项目的持续进步和扩展打下了坚实基础。更多详细信息,请查阅官方公告。


项目主页:
https://www.ferretdb.io/

https://github.com/FerretDB/FerretDB