首页/新闻资讯/正文详情

FerretDB v1.19.0 发布深度解读:SQLite 嵌套字段索引、SCRAM-SHA-256 认证演进与关键 Bug 修复

发布时间:2026/9/24 0:11:41 来源:云帆数科 栏目:资讯中心
FerretDB v1.19.0 发布深度解读:SQLite 嵌套字段索引、SCRAM-SHA-256 认证演进与关键 Bug 修复
后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载本篇基于 FerretDB 官方 v1.19.0 发布公告结合当前仓库源码系统讲解该版本的两大主线一是 SQLite 后端新增嵌套字段nested fields索引创建能力二是为SCRAM-SHA-256认证机制铺路而引入的用户管理命令族createUser、dropUser、usersInfo等。同时覆盖getMore的maxTimeMS、upsert$setOnInsert、重复_id索引验证等多项重要 Bug 修复帮助读者在升级到 v1.19.0 时准确评估新能力、规避已知问题并理解 FerretDB 认证体系后续演进的底层脉络。发布概览FerretDB v1.19.0 是 2024 年 1 月发布的里程碑版本核心交付物包括新功能SQLite 后端支持在嵌套字段上创建索引直接提升嵌套文档结构的查询性能Bug 修复修复getMore命令的maxTimeMS处理对 tailable cursor 至关重要、upsert与$setOnInsert组合失效问题、重复创建_id索引时的错误校验逻辑认证演进为未来支持SCRAM-SHA-256机制新增了一批基础用户管理命令并支持通过隐藏 flag 开启实验性认证模式文档更新补充 OpLog 功能的使用文档并修复了文档站搜索无法处理$eq等操作符查询的问题。该版本继续强化 FerretDB 作为真正开源 MongoDB 替代品的两大支柱——兼容性与性能同时为后续用户管理与认证体系的大规模重构打下地基。新功能SQLite 后端支持嵌套字段索引在 v1.19.0 之前SQLite 后端对索引的支持主要停留在顶层字段。本次发布解除了这一限制现在可以对文档中嵌套在对象内部的字段创建索引。使用方式假设你有一个supply集合其中的文档形如{ _id: ObjectId(...), item: { name: widget, qty: 42 } }现在可以直接对嵌套字段item.name创建升序索引db.supply.createIndex({ item.name: 1 })命令执行成功后FerretDB 会在 SQLite 后端为item对象内部的name字段建立升序索引。此后针对嵌套结构发起的查询例如db.supply.find({ item.name: widget })可以利用该索引显著提速尤其适合文档层级较深、嵌套访问频繁的业务场景。源码层面的支撑从命令分发角度看索引创建经由 internal/handler/msg_createindexes.go 中的msgCreateIndexes处理它先校验indexes字段必须存在再通过h.p.WithConn获取后端连接最终调用documentdb_api_internal.CreateIndexesNonConcurrently落库并把后端的错误码如code、errmsg映射为标准的 MongoDB 命令错误。整个调用链说明嵌套字段索引能力是数据库内核层DocumentDB API支持的而非简单的客户端语法糖索引键路径的解析、存储与查询匹配都在后端完成。关键 Bug 修复getMore的maxTimeMS与 tailable cursortailable cursor 依赖getMore长时间挂起以等待新数据因此maxTimeMS的处理直接关系到游标生命周期。v1.19.0 修复了getMore命令中maxTimeMS的解析与校验问题。在 integration/cursor/getmore_test.go 中可以看到针对该修复的大量回归测试例如maxTimeMS传-1、math.MaxInt64、1000.5等非法值时应分别报出out of range或non-integral value错误nil或字符串类型应报maxTimeMS must be a number或类型不匹配错误。这些用例印证了修复后getMore对超时参数做了严格的类型与取值范围校验避免 tailable cursor 场景下出现异常行为。upsert与$setOnInsert组合失效upsert在文档不存在时执行插入此时$setOnInsert指定的字段应当被一并写入。v1.19.0 修复了该组合不生效的问题。对依赖存在则更新、不存在则按模板插入语义的业务如计数聚合、去重写入而言这一修复让findAndModify/update的行为与 MongoDB 原生语义保持一致。重复_id索引验证此前在特定条件下重复创建_id索引会错误地抛出 Index already exists with a different name 错误。v1.19.0 修复了_id索引创建的验证过程使重复创建_id索引成为幂等操作不再误报命名冲突。这对自动化脚本反复执行createIndexes的场景如 CI 初始化、迁移脚本重跑尤为友好。认证体系演进向 SCRAM-SHA-256 迈进v1.19.0 在认证方向上的动作是战略性的FerretDB 团队连续多个版本都在为支持SCRAM-SHA-256机制做准备这是大量潜在用户在生产应用中落地 FerretDB 的硬性诉求。支撑该机制的前提是FerretDB 自行管理用户因此需要补齐完整的用户管理命令。新增用户管理命令v1.19.0 已提供以下命令的基础支持命令作用对应源码createUser创建用户并分配角色internal/handler/msg_createuser.godropUser删除指定用户internal/handler/msg_dropuser.godropAllUsersFromDatabase清空当前库的全部用户internal/handler/msg_dropallusersfromdatabase.goupdateUser更新用户密码与角色internal/handler/msg_updateuser.gousersInfo查询用户信息internal/handler/msg_usersinfo.go从实现看这些命令均遵循同一模式通过h.s.CreateOrUpdateByLSID绑定逻辑会话再用h.p.WithConn获取连接并调用 DocumentDB API如documentdb.CreateUser、documentdb_api.DropUser、documentdb_api.UsersInfo执行实际存储操作。以createUser为例internal/handler/msg_createuser.go 中有两个值得注意的细节若客户端未显式提供rolesFerretDB 会自动附加默认角色clusterAdminreadWriteAnyDatabase均在admin库并输出一条警告日志会先移除mechanisms字段再下发后端相关完整支持仍在演进中见代码中的 TODO 标记。启用方式隐藏测试 flag当前这些用户管理命令仅供测试用途需要通过隐藏 flag 开启# 命令行方式 ferretdb --test-enable-new-auth # 或环境变量方式 FERRETDB_TEST_ENABLE_NEW_AUTHtrue ferretdb该 flag 在 website/versioned_docs/version-v1.24/configuration/flags.md 中登记为Flag说明环境变量默认值--test-enable-new-authEnable new authentication modeFERRETDB_TEST_ENABLE_NEW_AUTHfalse注意v1.19.0 发布时该 flag 属于--test-*隐藏参数不会出现在--help输出中文档中也明确标注不要记录--test-XXXflags。这提醒使用者此模式尚处实验阶段接口可能随版本演进而变化不应直接用于生产环境。完整实操示例开启实验性认证模式后可以用runCommand走一遍完整的用户生命周期ferretdb db.runCommand({ createUser: user, pwd: password, roles: [] }); { ok: 1 } ferretdb db.runCommand({usersInfo:1}) { users: [ { _id: ferretdb.user, user: user, db: ferretdb, roles: [], userId: UUID(26e8c6fa-46b1-4f3f-9754-fbfa7a2bf4b8) } ], ok: 1 } ferretdb db.dropUser(user); { ok: 1 }从输出可以看到用户_id采用库名.用户名的复合命名ferretdb.useruserId为 UUID 二进制类型db字段标识用户归属库——这与 MongoDB 的用户文档模型一致为后续SCRAM-SHA-256认证打好了数据基础。测试用例佐证仓库中的集成测试 integration/auth/create_user_test.go 覆盖了createUser的丰富边界场景空用户名、空密码、密码含\x00与非法 Unicode 字符均被拒绝缺少pwd、roles字段或类型错误时返回对应的 MongoDB 错误码如Location40414、TypeMismatch成功的createUser会写入SCRAM-SHA-256凭据包含iterationCount15000、salt、storedKey、serverKey等字段——这正是 SCRAM 认证所需的完整凭据结构。这进一步印证v1.19.0 已具备以 SCRAM-SHA-256 格式存储用户凭据的能力只待认证链路握手、会话校验贯通后即可对外提供完整认证。文档与生态更新OpLog 使用文档补齐v1.18.0 引入了 OpLog 功能后v1.19.0 继续完善其使用文档说明如何为应用配置 OpLog。有了 OpLog开发者可以用 FerretDB 搭建实时应用——典型代表是基于 Meteor 框架的实时数据同步场景Meteor 依赖 MongoDB oplog 实现 live query。文档站搜索修复此前的文档搜索无法正确处理包含$eq这类操作符的查询——$前缀字符会导致检索失败。v1.19.0 修复了该问题使得开发者可以正常检索以$开头的操作符文档降低了查阅操作符语义的门槛。总结FerretDB v1.19.0 是一次能力补强 地基铺设型发布对 SQLite 用户嵌套字段索引让复杂文档结构的查询性能获得直接提升对游标与写入场景maxTimeMS、upsert$setOnInsert、重复_id索引等修复消除了多项实际兼容性障碍对认证演进用户管理命令族与 SCRAM-SHA-256 凭据存储的落地为后续完整认证机制--test-enable-new-auth从实验走向正式奠定了坚实的数据层与命令层基础。如果你想进一步深入可以阅读 CHANGELOG.md、用户管理命令源码internal/handler 目录下的msg_createuser.go、msg_dropuser.go、msg_usersinfo.go等以及 integration/auth 与 integration/cursor 下的集成测试全面掌握该版本的行为边界。赞分享后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载相关推荐FerretDB 认证机制详解基于 PostgreSQL 的 SCRAM-SHA-256 用户认证与配置实战FerretDB 认证机制详解基于 PostgreSQL 的 SCRAM SHA 256 用户认证与配置实战 认证Authentication是数据库安全后端数据库文档数据库FerretDB 认证机制完全指南基于 PostgreSQL 的 SCRAM-SHA-256 用户认证与配置实战FerretDB 认证机制完全指南基于 PostgreSQL 的 SCRAM SHA 256 用户认证与配置实战 FerretDB 是一款真正开源、与 Mon后端数据库文档数据库FerretDB v1.6.0 发布解读SQLite 后端 ping/getParameter、killCursors 游标管理与关键修复FerretDB v1.6.0 发布解读SQLite 后端 ping/getParameter、killCursors 游标管理与关键修复 FerretDB后端数据库文档数据库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

基于UNet与UNet++的细胞医学图像分割Python实现源码
基于UNet与UNet++的细胞医学图像分割Python实现源码

简介:这份源码面向计算机相关专业的毕业设计、课程设计及期末综合作业需求,提供基于UNet与UNet两种编码器-解码器架构的医学细胞图像分割完整实现,采用Python编写,原为本科三年级课程设计,在导师指导下获99分评价&… · 2026/9/24 0:11:22

边缘驱动对流原理与跨学科应用解析
边缘驱动对流原理与跨学科应用解析

1. 边缘驱动对流(EDC)的核心原理边缘驱动对流(Edge-driven convection,简称EDC)是地球物理学中描述岩石圈-软流圈系统内物质循环的重要机制。其本质是水平方向上的物理性质突变(温度、密度、粘度差异&#… · 2026/9/24 0:11:16

PyTorch从零实现贝叶斯神经网络:不确定性量化实战
PyTorch从零实现贝叶斯神经网络:不确定性量化实战

简介:本资源是一份面向机器学习进阶学习者与研究者的贝叶斯神经网络实践教程代码包,聚焦于不确定性建模这一核心需求,助力读者掌握小样本学习、模型校准与置信度预测等关键能力。压缩包共12个文件,含6个Python脚本(如b… · 2026/9/24 0:10:51

科普宣传片拍摄性价比与行业现状及选择指南
科普宣传片拍摄性价比与行业现状及选择指南

开篇品牌摘要 长沙光石文化传播有限公司是一家深耕影视与数字内容创作十余年的综合传媒服务企业,业务覆盖影视策划拍摄制作、广播电视节目制作、数字动画制作、新媒体短视频服务、AI视频制作及专业摄影摄像,可为政企、中小企业、文旅机构等各类客户提供全… · 2026/9/24 0:57:49

2026深圳价格实惠的断桥铝合金门窗工厂给推荐几家、求推荐做断桥铝合金门窗口碑好的工厂、靠谱的断桥铝合金门窗工厂求推荐有没有几家用户力荐
2026深圳价格实惠的断桥铝合金门窗工厂给推荐几家、求推荐做断桥铝合金门窗口碑好的工厂、靠谱的断桥铝合金门窗工厂求推荐有没有几家用户力荐

深圳市新百佳智能门窗技术有限公司,是一家扎根深圳龙岗、集研发、数控生产、个性化定制、上门安装与终身维保于一体的全链条断桥铝合金门窗实体厂家,主营断桥铝合金智能系统门窗研发定制与阳光房定制,业务覆盖家装、工装、招商、外贸四大板块… · 2026/9/24 0:57:49

二维火收银系统服务器超时与配件连接排查实战指南
二维火收银系统服务器超时与配件连接排查实战指南

1. 项目概述:二维火收银系统为什么值得一次系统性排查做餐饮这些年,店里最怕听到的一句话就是"收银机又卡了",尤其是高峰期正忙着下单,屏幕上突然弹出"服务器连接超时"——那一瞬间整个前台都僵住了。二维火作… · 2026/9/24 0:57:18

JavaWeb企业人事管理系统:从MVC架构到部署避坑全解析
JavaWeb企业人事管理系统:从MVC架构到部署避坑全解析

简介:一份面向Java初学者的企业人事管理系统完整源码,基于Servlet、JSP、JDBC及MVC分层架构,覆盖用户登录、员工档案、部门职位、考勤管理、薪酬福利、绩效培训、报表统计等典型业务模块,适合作为毕业设计或课程项目参考&#xff… · 2026/9/24 0:57:12

RPA自动化解放生产力:影刀实战经验分享
RPA自动化解放生产力:影刀实战经验分享

1. 项目背景与核心价值去年接手新项目时,我每天要花3小时重复处理Excel报表。直到发现影刀RPA这个神器,才真正体会到"科技解放生产力"的含义。现在我的日报生成、数据核对、邮件发送等重复工作全部交给机器人处理,每天多出2小时研究… · 2026/9/24 0:56:54

cua:一个让批处理与模板替换回归简单的命令行工具
cua:一个让批处理与模板替换回归简单的命令行工具

先说一个重要的事情:这份输入里只有标题“cua”和热词“cua”,没有正文、没有行业背景,也没有“项目正文”细节,严格来说信息量不足以支撑一篇高质量博文。为了不让这次沟通空转,我这里做两件事:第一&#… · 2026/9/24 0:56:54

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码