尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

FerretDB v1.13.0 新 PostgreSQL 后端:默认启用、Docker 数据目录与 pushdown 增强解读

发布时间:2026/9/24 0:50:13

资讯中心
01
ARTICLE

FerretDB v1.13.0 新 PostgreSQL 后端:默认启用、Docker 数据目录与 pushdown 增强解读

FerretDB v1.13.0 新 PostgreSQL 后端:默认启用、Docker 数据目录与 pushdown 增强解读
后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载FerretDB v1.13.0 是 FerretDB 在 2023 年 10 月发布的一个重要里程碑版本此前数月持续迭代的新 PostgreSQL 后端在该版本中正式默认启用同时带来了 Docker 镜像默认 SQLite 数据目录改为/state卷、linux/arm/v7平台支持、以及针对 PostgreSQL/SQLite 两个后端的查询下推pushdown增强。本文以官方发布说明 website/blog/2023-10-24-ferretdb-v1130-new-postgresql-backend.md 为主线结合当前仓库中的源码与构建配置逐项解读这些变更的技术细节、配置方式与升级注意事项。说明本文描述的是 FerretDB v1.13.0 发布时的历史事实当前仓库代码已演进至 v2 架构基于 PostgreSQL DocumentDB 扩展文中引用当前仓库文件仅用于佐证相关机制如/state目录、--postgresql-url参数等的延续与实现请注意区分版本语境。版本概览v1.13.0 带来了什么本次发布的核心变更可以归纳为四点新 PostgreSQL 后端正式默认启用旧后端可通过--postgresql-old标志或FERRETDB_POSTGRESQL_OLDtrue环境变量临时回退但该回退开关将在下一个版本移除Docker 镜像的 SQLite 默认数据目录改为/state该目录同时声明为 Docker 卷volume容器重启后数据默认得以保留新增linux/arm/v7支持覆盖二进制、Docker 镜像以及.deb/.rpm软件包性能与兼容性增强PostgreSQL 后端新增更多查询下推SQLite 后端新增_id: string过滤条件下推修复了_id字段校验 bug补齐了collStats、dbStats、聚合管道$collStats的部分缺失字段并为 PostgreSQL 后端加入基础日志能力。其中新 PostgreSQL 后端默认启用是本次发布最值得关注的架构级变化下文优先展开。新 PostgreSQL 后端从默认关闭到默认开启为什么会有新 PostgreSQL 后端在 v1.13.0 之前的版本中FerretDB 同时维护两套 PostgreSQL 后端实现旧后端承载着早期功能而新后端是团队花数月时间重写的实现目标是更完整的 MongoDB 兼容性、更高效的查询下推以及更稳定的行为。v1.13.0 将新后端提升为默认路径标志着它已具备承担日常使用的能力。默认启用与临时回退开关升级到 v1.13.0 后无需任何额外配置即可使用新后端。如果遇到新后端行为与旧后端不一致的问题可以临时回退# 方式一命令行标志 ferretdb --postgresql-old # 方式二环境变量 FERRETDB_POSTGRESQL_OLDtrue ferretdb发布说明明确强调该回退选项将在下一版本v1.14中移除因此它只适合作为升级过渡期的应急手段不应作为长期运行配置。从当前仓库的 CLI 定义cmd/ferretdb/main.go可以看到PostgreSQL 连接相关的核心参数至今依然沿用--postgresql-url形态默认值为postgres://127.0.0.1:5432/postgres并支持通过--postgresql-url-file从文件中读取连接串非空时覆盖前者。这类标志 同名环境变量FERRETDB_前缀见kong.DefaultEnvars(FERRETDB)的双通道配置模式正是发布说明中FERRETDB_POSTGRESQL_OLD环境变量能够生效的底层机制——所有 CLI 参数都可以用FERRETDB_ 大写参数名的方式以环境变量注入。从源码看新后端的运行形态虽然仓库当前已是 v2 代码库但从结构上仍能清晰地看到新后端的核心特征处理命令直接面向 PostgreSQL 连接例如collStats与dbStats命令的处理逻辑internal/handler/msg_collstats.go、internal/handler/msg_dbstats.go都通过h.p.WithConn取得一个pgx.Conn再调用documentdb_api.CollStats/documentdb_api.DbStats执行实际查询命令处理与数据库访问解耦命令入口位于 internal/handler实际 SQL 执行位于 internal/documentdb/documentdb_api中间由 internal/documentdb 的连接池pool.go管理连接生命周期。这印证了发布说明中PostgreSQL 后端承载 collStats/dbStats 等统计命令的描述也说明统计类命令最终是在 PostgreSQL 侧计算并返回结果的。Docker 镜像SQLite 默认数据目录改为/state卷变更内容从 v1.13.0 起FerretDB 的 Docker 镜像为 SQLite 后端引入了默认数据目录/state。该目录被声明为 Docker 卷因此容器重启后数据默认保留无需手动挂载 volume数据持久化的默认体验得到显著改善降低了误操作丢失数据的风险。影响范围与例外发布说明特别指出此变更不影响二进制发行版以及.deb/.rpm软件包——这些形态的默认数据目录保持原样只有 Docker 镜像采用了新的/state约定。当前仓库中的印证虽然 v1.13.0 距今已久但/state目录约定在仓库中一直延续至今。在 build/ferretdb/production.Dockerfile 中可以看到VOLUME /state ENV FERRETDB_STATE_DIR/statedevelopment.Dockerfile、eval.Dockerfile、eval-dev.Dockerfile同样声明了VOLUME /state与ENV FERRETDB_STATE_DIR/state。对应地cmd/ferretdb/main.go 中的StateDir参数--state-dir默认.与state.NewProviderDir(cli.StateDir)cmd/ferretdb/main.go构成了状态目录的解析链路——镜像通过ENV FERRETDB_STATE_DIR/state将进程状态目录指到/state再叠加VOLUME声明实现数据持久化。这正是 v1.13.0 发布说明所述目录同时是 Docker 卷重启后数据默认保留的完整实现。平台支持linux/arm/v7v1.13.0 是 FerretDB 较早覆盖 32 位 ARM 平台arm/v7的版本之一新增形态包括linux/arm/v7二进制对应架构的 Docker 镜像linux/arm/v7的.deb/.rpm软件包。这对于运行在树莓派等 ARM 单板计算机上的用户尤为重要——意味着小型化、边缘化部署场景如自建家庭服务器、IoT 环境中的数据存储可以使用官方发布产物而无需自行交叉编译。所有发行产物均可在项目的 GitHub Releases 页面按 tag 下载。提示当前仓库的构建体系已演进arm/v7是否仍作为持续发布的架构矩阵之一以各版本实际发布的 Release 产物为准。本段落描述的是 v1.13.0 发布时的客观事实。性能增强更深的查询下推pushdownPostgreSQL 后端新增更多下推查询下推是指把本应在 FerretDB 进程内完成的过滤、排序、聚合等操作转换为 SQL 交给 PostgreSQL 执行从而减少 FerretDB 与数据库之间的数据传输量充分利用 PostgreSQL 的索引与执行引擎降低内存占用与 CPU 开销。v1.13.0 为 PostgreSQL 后端引入了额外的下推使得更多类型的查询能够直接在数据库层完成。发布说明推荐通过此前的博客文章了解 FerretDB 下推的整体原理仓库内亦可参考 website/versioned_docs/version-v1.24/pushdown.md 了解下推机制的文档化描述。SQLite 后端_id: string过滤下推SQLite 后端在 v1.13.0 中新增了_id: string形式过滤条件的下推。当查询形如db.collection.find({ _id: some-string-id })时该条件可以被直接下推到 SQLite 的WHERE子句而无需先全量拉取文档再在内存中过滤。字符串类型的_id是 MongoDB 中最常见的文档标识形态因此该优化覆盖面广、实用价值高。其他变更bug 修复与统计命令补齐修复_id字段非法校验导致的误报此前版本存在一个由_id字段校验逻辑不严谨引发的 bug当尝试插入形如下面的文档时db.test.insertOne({ _id: 1, v: { _id: [foo, bar] } })会被错误地拒绝并返回_idvalue cannot be of type array的错误。问题根源在于校验逻辑未能区分顶层_id与嵌套在普通字段v内部的_id——后者只是嵌套文档中的一个普通字段其值完全可以是数组。v1.13.0 修正了这一误判仅对真正的顶层_id字段施加类型约束。补齐collStats、dbStats、$collStats字段本次发布补齐了collStats、dbStats以及聚合管道$collStats阶段中此前缺失的部分字段使统计类输出更贴近 MongoDB 的返回结构。从当前仓库实现看collStats命令支持scale参数internal/handler/msg_collstats.go并通过documentdb_api.CollStats在 PostgreSQL 侧计算dbStats命令则固定以 scale1 调用documentdb_api.DbStatsinternal/handler/msg_dbstats.go。这些细节说明统计命令并非简单转发而是有真实的数据库端计算逻辑支撑。PostgreSQL 后端基础日志v1.13.0 为 PostgreSQL 后端加入了基础日志能力便于排查连接问题、慢查询与错误行为。日志体系与 FerretDB 主进程一致当前仓库中由 internal/util/logging 统一管理支持console/text/json/mongo等格式见 cmd/ferretdb/main.go 的logFormats定义用户在调试后端行为时可通过日志定位 SQL 执行层面的异常。升级与运行建议结合发布说明与当前仓库的配置机制升级到 v1.13.0或参考其配置模式部署新版本时有几点实践建议新后端默认启用先做兼容性验证升级后先运行常规读写、查询与聚合用例确认业务行为符合预期若遇到问题可用--postgresql-old或FERRETDB_POSTGRESQL_OLDtrue临时回退但应尽快定位并跟进修复因为回退开关将在下一版本移除Docker 部署注意数据目录镜像默认将 SQLite 数据写入/state该目录已是 Docker 卷重启不会丢数据若需要自定义位置可显式指定--state-dir或FERRETDB_STATE_DIR并手动挂载对应卷连接串两种注入方式PostgreSQL 连接既可用--postgresql-url指定也可用--postgresql-url-file指向包含连接串的文件后者优先级更高适合在容器或密钥管理场景下使用参考 cmd/ferretdb/main.go查询性能依赖_id: string精确过滤、以及可下推的过滤/排序/聚合条件的查询在本次发布后可获得更好的执行效率。结语FerretDB v1.13.0 通过新 PostgreSQL 后端默认启用 Docker 默认持久化目录 arm/v7 支持 更深的下推优化这组组合拳显著降低了用户的上手成本与部署门槛同时为后续性能与兼容性工作奠定了基础。理解这些变更背后的配置机制标志与环境变量的双通道、/state卷约定、下推与统计命令的数据库端实现有助于在升级 FerretDB 时做出正确的部署决策也能为阅读当前仓库中 cmd/ferretdb/main.go、internal/handler 与 build/ferretdb 下的源码提供清晰的上下文。赞分享后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载相关推荐FerretDB v1.12 发布解读新 PostgreSQL 后端、arm64 支持与可观测性增强FerretDB v1.12 发布解读新 PostgreSQL 后端、arm64 支持与可观测性增强 FerretDB v1.12 是该项目迈向以全新架构支后端数据库文档数据库FerretDB Query Pushdown 详解把过滤下推到 PostgreSQL减少数据读取FerretDB Query Pushdown 详解把过滤下推到 PostgreSQL减少数据读取 Query pushdown查询下推是 Ferret后端数据库文档数据库如何把QQ空间十年老说说不丢一条地备份下来GetQzonehistory 完整实操指南如何把QQ空间十年老说说不丢一条地备份下来GetQzonehistory 完整实操指南 几年前写在QQ空间里的说说现在想留个底只能一页页翻、一张张截图。G网页爬虫数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。