FerretDB 2.0:开源 MongoDB 替代品的安装与使用指南

介绍

FerretDB 2.0 是一个开源数据库,旨在作为 MongoDB 的替代品。它与 MongoDB 5.0+ 的驱动程序和工具兼容,适合需要避免 MongoDB 许可复杂性的开发者。它的核心特点是使用 PostgreSQL 作为后端,并通过 DocumentDB 扩展提升性能,研究表明某些工作负载可快 20 倍。

安装与使用

安装 FerretDB 2.0 使用 docker compose 需要以下步骤:

  1. 创建 docker-compose.yml 文件

    yaml 复制代码
    services:
      postgres:
        image: ghcr.io/ferretdb/postgres-documentdb:17-0.102.0-ferretdb-2.0.0
        platform: linux/amd64
        restart: on-failure
        environment:
          - POSTGRES_USER=username
          - POSTGRES_PASSWORD=password
          - POSTGRES_DB=postgres
        volumes:
          - ./data:/var/lib/postgresql/data
      ferretdb:
        image: ghcr.io/ferretdb/ferretdb:2.0.0
        restart: on-failure
        ports:
          - 27017:27017
        environment:
          - FERRETDB_POSTGRESQL_URL=postgres://username:password@postgres:5432/postgres
    networks:
      default:
        name: ferretdb
  2. 运行 docker compose up -d 启动服务。

  3. 使用 mongosh 连接,例如 mongosh "mongodb://username:password@127.0.0.1/",或通过 docker 运行临时容器连接。

使用方法上,FerretDB 2.0 像 MongoDB 一样,支持插入、查询、更新和删除等操作,适合现有 MongoDB 应用的迁移。

基本使用示例

以下是一些常见的 FerretDB 操作示例:

1. 插入数据

javascript 复制代码
db.mycol.insertOne({ name: "Alice", age: 25 });  

2. 查询数据

javascript 复制代码
db.mycol.find({ age: { $gt: 20 } });  

3. 创建索引

javascript 复制代码
db.mycol.createIndex({ name: 1 });  

4. 聚合查询

javascript 复制代码
db.mycol.aggregate([{ $group: { _id: "$name", total: { $sum: 1 } } }]);  
优劣分析
优点
  • 开源与许可:FerretDB 2.0 采用 Apache 2.0 许可,完全开源,符合开源倡议组织 (OSI) 的标准,避免了 MongoDB SSPL 许可带来的限制,适合开源项目和早期商业项目。
  • 兼容性:研究表明,FerretDB 2.0 与 MongoDB 5.0+ 兼容,支持大多数驱动程序和工具,方便现有 MongoDB 应用的迁移。官方文档提到不断增加功能以提升兼容性。
  • 性能提升:根据博客和新闻报道,FerretDB 2.0 通过 DocumentDB 扩展,某些工作负载性能提升 20 倍,接近市场领先替代品。
  • 灵活性:使用 PostgreSQL 作为后端,开发者可以利用 PostgreSQL 的丰富生态系统,包括扩展和工具,同时避免供应商锁定。
  • 社区支持:GitHub 仓库显示活跃的开发社区,定期发布更新,包括 Debian 和 RPM 包支持,改进日志和索引功能。
缺点
  • 成熟度:尽管 2025 年 3 月 4 日已发布 GA 版本,但作为较新的项目,可能会存在与 MongoDB 某些边缘功能或特性的兼容性问题。官方文档提到已知差异列表,需用户注意。
  • 学习曲线:对于熟悉 MongoDB 的用户,可能需要了解 FerretDB 的底层机制,尤其是优化性能时,可能需要调整 PostgreSQL 配置。
  • 依赖性:安装需要 PostgreSQL 实例并启用 DocumentDB 扩展,这增加了设置和管理的复杂性,可能不适合对 PostgreSQL 不熟悉的用户。
  • 文档完整性 :相比 MongoDB 多年的文档积累,FerretDB 2.0 的文档虽然有一定深度(如安装指南和差异列表),但可能在高级功能或最佳实践方面不够全面,需参考 官方文档 获取最新信息。
已知差异示例

根据官方文档的部分信息,已知与 MongoDB 的差异包括:

已知差异 详情
协议错误 使用与 MongoDB 相同的错误名称和代码,但错误消息可能不同。
集合名称 FerretDB 要求集合名称为有效 UTF-8,而 MongoDB 允许无效 UTF-8 序列。

这些差异表明,虽然兼容性高,但用户在迁移时需检查特定功能是否受影响,建议参考 迁移差异页面 获取完整列表。

额外考虑

FerretDB 2.0 的发展动态显示,它正在积极响应用户反馈,例如 2024 年 9 月 MongoDB 宣布弃用 Atlas Data API 后,FerretDB 2.0 提供了兼容替代方案。这表明其社区响应迅速,但也反映了其仍在快速迭代中,可能存在未完全稳定的部分。

总之,FerretDB 2.0 是一个有潜力的开源数据库,特别适合需要 MongoDB 兼容性且重视开源许可的场景。安装和使用相对简单,但用户需权衡其成熟度和文档的全面性。

相关推荐
m0_5557629012 分钟前
通过接口或抽象类进一步解耦
数据库·系统架构
SelectDB2 小时前
SelectDB 实时分析性能突出,宝舵成本锐减与性能显著提升的双赢之旅
大数据·数据库·数据分析
V+zmm101342 小时前
电器维修系统小程序+论文源码调试讲解
java·数据库·微信小程序·小程序·毕业设计
PawSQL2 小时前
推理模型对SQL理解能力的评测:DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet
java·数据库·人工智能·sql·sql优化·pawsql·deepseek
*星星之火*2 小时前
【GPT入门】第12课 FunctionCall 生成数据库sql代码
数据库·sql·gpt
陈卓4102 小时前
Redis-缓存穿透&击穿&雪崩
数据库·redis·缓存
泡泡Java2 小时前
Redis离线安装(内网,源码安装)
数据库·redis·缓存
想做富婆2 小时前
存储过程和自定义函数在银行信贷业务中的应用(oracle)
数据库·存储过程·银行贷款业务
用户9704438781162 小时前
如何在自己的网站接入API接口获取数据
人工智能·python·开源
珹洺2 小时前
数据库系统概论(三)数据库系统的三级模式结构
java·运维·服务器·数据库·oracle