资讯动态

FerretDB v1.15.0 核心特性解读:showRecordId 查询、JSON 日志与更灵活的启动配置

发布时间:2026/9/23 21:52:57 来源:尧图企业网站定制
后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载FerretDB v1.15.0 是一次聚焦可观测性与部署灵活性的版本发布核心亮点包括find命令新增showRecordId选项、日志输出新增 JSON 格式、--debug-addr与--state-dir支持显式禁用以及为find操作生成带注释的 SQL 查询。本文以该版本发布说明为主体结合当前仓库中的启动入口、配置文档与集成测试源码逐项剖析这些特性的用法、底层实现与适用场景帮助你快速评估并上手这一版本带来的运维能力提升。一、版本定位与整体变化FerretDB 是一款开源的文档数据库目标是以 MongoDB 兼容协议承载 PostgreSQL 等后端数据库的工作负载。v1.15.0 没有引入破坏性的协议变更而是把重心放在三类事情上查询能力的增强find命令支持showRecordId可以查看每条文档的存储级唯一 ID$recordId可观测性的补全日志支持 JSON 等机器可读格式同时允许彻底关闭调试 HTTP 服务--debug-addr部署灵活性的提升允许无状态目录运行--state-dir可禁用、使用 PostgreSQL 既有 schema如默认的public并为后续多操作系统制品分发做准备制品文件名统一加入linux标识。其中--debug-addr与--state-dir的“空字符串或-即禁用”约定是一个值得注意的统一设计我们会在后面结合源码展开。二、find新增showRecordId查看文档的存储级唯一 ID2.1 功能说明在 v1.15.0 之前find返回的文档只包含用户写入的字段。启用showRecordId后返回结果会额外携带每个文档的内部存储 ID$recordId便于在数据定位、排障与对照存储层记录时使用。在 MongoDB Shell 中通过find命令启用// 返回结果中的每个文档会多出 $recordId 字段 db.collection.find({}, { showRecordId: true })从 v1.15.0 的集成测试用例看其驱动层面的等价写法是设置FindOptions的ShowRecordIDopts : options.Find().SetShowRecordID(true).SetBatchSize(2) cursor, err : collection.Find(ctx, bson.D{}, opts)测试特意将BatchSize设为 2注释说明“small batch size is set to ensure getMore sets recordID”即$recordId在分页getMore场景下也需要持续正确返回。2.2 返回结构与测试验证仓库中的集成测试 integration/query_test.goTestQueryShowRecordID给出了返回结构的验证逻辑当showRecordId为true时结果文档中必须出现$recordId字段为false时$recordId必须为nil。测试对返回文档做了归一化比较确保启停该选项只影响$recordId的增减不影响其余字段与_id。2.3 类型校验与错误行为showRecordId必须是布尔值传入其他类型会触发TypeMismatch错误。仓库中 integration/query_test.goTestQueryShowRecordIDErrors覆盖了三种非法输入及其错误信息传入值错误码错误信息与 MongoDB 对齐null14 (TypeMismatch)Field showRecordId should be a boolean value, but found: nullint32(0)14 (TypeMismatch)Field showRecordId should be a boolean value, but found: intstring14 (TypeMismatch)Field showRecordId should be a boolean value, but found: string这组测试同时验证了 FerretDB 在类型错误场景下与 MongoDB 的错误语义保持一致方便依赖该选项的客户端平滑迁移。三、日志输出支持 JSON 格式可观测性再进一步v1.15.0 为日志新增了 JSON 格式支持。FerretDB 的结构化日志统一写入标准错误流stderr近期日志条目还可以通过getLog命令读取。3.1 四种日志格式根据当前仓库的可观测性文档FerretDB 共支持四种--log-formatconsole默认人类可读格式终端支持时对日志级别着色可通过设置NO_COLOR环境变量关闭 ANSI 颜色text类 logfmt 的机器可读格式由 Go 标准库slog.TextHandler实现jsonJSON 格式由 Go 标准库slog.JSONHandler实现——这正是 v1.15.0 引入的能力便于对接日志采集与全文检索系统mongo类似 MongoDB 的结构化 JSON 格式遵循 Relaxed Extended JSON 规范用于替换既有 MongoDB 日志解析管线的场景。从源码入口 cmd/ferretdb/main.go 可以看到日志相关的启动参数--log-leveldebug/info/warn/error与--log-formatconsole/text/json/mongo。格式分发的核心实现在 internal/util/logging/handler.go当 Base 为json时创建slog.NewJSONHandlermongo格式则由 internal/util/logging/mongo_handler.go 中专门的mongoHandler实现。3.2 日志级别与生产环境注意事项日志级别共四档error无法优雅处理、通常导致连接关闭的错误、warn可优雅处理、通常只向客户端返回错误的告警、info常规信息、debug仅供调试。默认级别为info开发构建默认debug。仓库文档明确提示debug级别会输出完整的查询/响应体、错误信息乃至认证凭据且写日志本身有性能开销因此不应在生产环境开启debug级别。运维时建议使用json或mongo格式接入集中日志平台同时保持info级别。# 以 JSON 格式、info 级别启动 FerretDB ./ferretdb --log-formatjson --log-levelinfo # 环境变量等价写法所有 CLI 标志均有 FERRETDB_ 前缀的环境变量对应 FERRETDB_LOG_FORMATjson FERRETDB_LOG_LEVELinfo ./ferretdb3.3 调试 HTTP 服务--debug-addr现在可以被彻底关闭FerretDB 默认在127.0.0.1:8088暴露调试 HTTP 服务提供/debug/metricsPrometheus 指标、/debug/livez存活探针、/debug/readyz就绪探针内部通过发送ping命令验证 MongoDB 协议连通性以及 PostgreSQL/DocumentDB 配置等端点详见可观测性文档。v1.15.0 之前这些端点无法按需关闭这在一部分严格安全基线或端口收敛场景下不够友好。新版本规定将--debug-addr设置为空字符串或-即可禁用整个调试 handler./ferretdb --debug-addr- # 或 --debug-addr FERRETDB_DEBUG_ADDR- ./ferretdb # 环境变量写法从启动入口 cmd/ferretdb/main.go 可以看到调试 handler 的启动被if cli.DebugAddr ! 包裹禁用后不会监听任何调试端口指标与探针端点一并关闭。需要注意关闭后/debug/livez、/debug/readyz探针也将不可用依赖 Kubernetes 健康检查的部署需要评估取舍。四、无状态目录运行--state-dir同样支持禁用FerretDB 使用状态目录存放进程状态含实例 UUID与遥测数据默认值为.当前目录。在无持久化盘的容器或 serverless 场景中这个目录往往是负担。v1.15.0 沿用了与--debug-addr相同的约定--state-dir设置为空字符串或-即关闭状态目录./ferretdb --state-dir- FERRETDB_STATE_DIR- ./ferretdb在 cmd/ferretdb/main.go 中状态目录被传入state.NewProviderDir(cli.StateDir)构造状态提供者ferretdb/ferretdb.go中作为配置项的StateDir同样用于状态提供者与遥测报告器的初始化。禁用后依赖该目录持久化的信息例如实例 UUID、遥测上报进度将不再落盘重启后实例身份等信息会重新生成适合完全无状态的一次性实例。4.1 “-即禁用”约定的统一实现值得注意的是-的语义并非分散在各处判断而是集中在启动时的标志检查逻辑 cmd/ferretdb/main.gocheckFlags中凡是允许禁用的标志--listen-addr、--listen-unix、--listen-tls、--listen-data-api-addr、--listen-mcp-addr、--debug-addr、--otel-traces-url在解析后都会把字面值-统一替换为空字符串。这样既满足命令行写法--debug-addr-也兼容环境变量场景FERRETDB_DEBUG_ADDR-避免因kong.DefaultEnvars(FERRETDB)注入的环境变量无法表达“空值”而导致的困惑。五、PostgreSQL 既有 schema 与带注释的 SQL 查询v1.15.0 还包含两项面向 PostgreSQL 后端的增强支持使用已有的 PostgreSQL schema。此前 FerretDB 倾向于使用自己管理的 schema部分用户希望直接使用默认的publicschema 以贴合既有数据库对象与权限设计。本版本放开了这一限制用户可以把 FerretDB 的数据落到已有的 schema 中降低与既有 PostgreSQL 运维体系的磨合成本。为find操作生成带注释的 SQL 查询。在调试、审计或与 DBA 协作分析慢查询时直接查看带有语义注释的 SQL 可以显著降低排查成本也让 FerretDB 生成的 SQL 与用户发起的 MongoDB 操作能够一一对应起来。说明当前仓库主线已演进至 v2 并引入 DocumentDB 后端上述两项属于 v1.15.0 时期 PostgreSQL 后端的行为增强在对应版本或历史分支部署时方可直接体验。六、制品命名变更为多操作系统分发铺路v1.15.0 调整了制品命名规范所有二进制与安装包的文件名统一加入linux标识例如从ferretdb调整为ferretdb-linux-amd64之类的命名。变更本身不改变功能其目的是让制品命名能够区分目标操作系统为后续提供 Linux 之外如 macOS、Windows的制品做好准备。这意味着自动化脚本中若硬编码了 v1.15.0 之前的制品文件名升级后需要同步更新下载与解压路径。七、配套文档与交互式体验升级v1.15.0 同步更新了两类面向用户的资产预迁移文档增强迁移前的功能验证流程补充了如何指定--listen-addr与--proxy-addr两个启动标志或通过FERRETDB_LISTEN_ADDR、FERRETDB_PROXY_ADDR环境变量配置的说明。当前仓库的预迁移测试文档保留了完整的演练步骤先用--proxy-addrmongodb-URI指向待迁移的 MongoDB 实例、--listen-addrferretdb-listen-address指定 FerretDB 监听地址再用mongosh连接到监听地址执行验证其中--listen-addrFERRETDB_LISTEN_ADDR默认为127.0.0.1:27017。Codapi 交互式代码沙箱文档与博客开始集成 Codapi 在线代码沙箱读者可以直接在页面上运行 FerretDB 命令无需本地安装即可体验 CRUD 操作降低了上手门槛。八、配置速查表结合配置文档把本文涉及的 v1.15.0 相关标志汇总如下均支持同名环境变量前缀FERRETDB_如--debug-addr对应FERRETDB_DEBUG_ADDR标志说明默认值是否可禁用--log-format日志格式console/text/json/mongoconsole—--log-level日志级别debug/info/warn/errorinfo—--debug-addr调试 HTTP 服务监听地址metrics、pprof、探针127.0.0.1:8088空字符串或-禁用--state-dir状态目录.空字符串或-禁用--listen-addrMongoDB 协议监听地址127.0.0.1:27017空字符串或-禁用--proxy-addr非 normal 操作模式下的代理地址空—结语v1.15.0 表面上看是一次小版本迭代实际补齐了几块长期影响生产可用性的拼图showRecordId让文档与存储层记录可以互相印证JSON 日志与可关闭的调试端口使日志管线接入和安全收敛都更从容--state-dir与--debug-addr的“空值或-即禁用”约定统一了无状态部署的体验对既有 PostgreSQL schema 的支持则进一步降低了与存量数据库体系集成的摩擦。配合文档站中更新的预迁移演练与 Codapi 交互沙箱这一版本无论对正在评估迁移的团队还是对已上线集群的运维人员都值得重点关注。本文涉及的关键仓库路径便于继续深入阅读启动入口与全部 CLI 标志cmd/ferretdb/main.go集成测试showRecordId行为与错误校验integration/query_test.go配置标志参考website/docs/configuration/flags.md日志格式与调试端点说明website/docs/configuration/observability.md日志格式分发实现internal/util/logging/handler.go预迁移验证步骤website/docs/migration/premigration-testing.md赞分享后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载相关推荐终极指南Baritone v1.15.0重磅更新新特性、API变更与实用功能全解析终极指南Baritone v1.15.0重磅更新新特性、API变更与实用功能全解析 Baritone是一款用于Minecraft的开源Java客户端提供多游戏开发Nextra更新日志版本迭代全解析与核心特性演进Nextra更新日志版本迭代全解析与核心特性演进 引言为什么版本追踪对开发者至关重要 你是否曾因依赖库的突发更新导致生产环境崩溃是否在升级工具链时面对海量前端文档/教程tchMaterial-parser上手指南从国家中小学智慧教育平台快速下载电子课本PDFtchMaterial parser上手指南从国家中小学智慧教育平台快速下载电子课本PDF 想在本地保存国家中小学智慧教育平台上的电子课本却只能在线翻页浏览网页爬虫教育创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价