当前位置: 首页 > article >正文

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

介绍

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

安装与使用

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

  1. 创建 docker-compose.yml 文件
    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. 插入数据

db.mycol.insertOne({ name: "Alice", age: 25 });  

2. 查询数据

db.mycol.find({ age: { $gt: 20 } });  

3. 创建索引

db.mycol.createIndex({ name: 1 });  

4. 聚合查询

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 兼容性且重视开源许可的场景。安装和使用相对简单,但用户需权衡其成熟度和文档的全面性。


http://www.kler.cn/a/581306.html

相关文章:

  • 笔记:代码随想录算法训练营day41:LeetCode121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III
  • SpringBoot基础Kafka示例
  • 第4章 Function 语意学3: 函数效能、Member Functions、inline
  • 调试正常 ≠ 运行正常:Keil5中MicroLIB的“量子态BUG”破解实录
  • 几种常见的去除白色背景的方式详解
  • golang recover错误
  • OpenGL ES ->帧缓冲对象(Frame Buffer Object)离屏渲染获取纹理贴图
  • 【6】字典树学习笔记
  • ClusterIP、Headless Service 和 NodePort 的比较
  • 如何提取神经网络中间层特征向量
  • 责任链模式的C++实现示例
  • 软考高级信息系统项目管理师笔记-第19章配置与变更管理
  • 接口自动化入门 —— swagger/word/excelpdf等不同种类的接口文档理解!
  • Ollama杂记
  • 【CXX】6.4 CxxString — std::string
  • LeetCode100之二叉树的直径(543)--Java
  • 牵引线标注:让地图信息更清晰的ArcGIS Pro技巧
  • 制作自定义镜像
  • docker-compose Install m3e(fastgpt扩展) GPU模式
  • 跨公网 NAT 配置方案:实现高效网络通信与安全访问