聊聊KingbaseES V9的MongoDB兼容版:到底怎么个平替法?
聊聊KingbaseES V9的MongoDB兼容版到底怎么个平替法最近一段时间我一直在帮几个项目做数据库层面的国产化替换工作。大家原来用MongoDB用得其实挺顺手的。存JSON文档结构灵活开发起来快。但是现在的情况是很多单位都有替换的要求。那换个什么呢这是个问题。如果直接换成某个独立的文档数据库往往又会面临安全认证过不去的情况。也就是在这个时候我看到了KES出的这个KingbaseES V9 MongoDB兼容版。今天这篇文章我就结合平时的实际经验还有他们发出来的产品资料跟大家仔细扒一扒这个东西到底是怎么实现的能不能直接用在我们的项目里。一、先搞清楚现在的多模数据处理到底遇到了什么麻烦其实很多时候我们并不是非要换数据库。老的架构用久了问题确实会慢慢冒出来。特别是当业务越来越复杂的时候。1.1 老架构的那些坑大家回想一下自己公司的系统架构。往往是这个业务线用一套MySQL那个业务线搞一个MongoDB旁边可能还放着一个Redis。这就形成了一个个独立的系统。大家管这个叫“烟囱式”架构。这种架构最大的问题是什么呢数据分散。你想要把关系数据和文档数据关联起来查一下非常麻烦。往往仅仅只是拉通两个库的数据就要写一堆同步脚本。数据对不上的情况经常发生。信息滞后不一致。接着就是开发周期变长。每接一个新需求可能就要引入新的技术栈。学习成本高不说后面运维的人也头疼。1.2 技术栈太多导致的问题技术栈一旦多起来最直接的感受就是人力成本变高了。招人的时候得会这个又会那个。系统间的交互协作成本也是直线上升。有时候重复建设重复投资的情况特别严重。每个库独立部署资源利用率其实很低。那么怎么解决这些问题呢思路其实很简单就是把能合并的东西合并到一起。二、KES V9整体架构是个啥情况为了解决上面说的这些麻烦KES V9这个版本里其实做了一个很大的调整。他们搞了一个一体化架构。我画了个简单的图大家看一眼。应用层基于MongoDB驱动的应用基于KES驱动的应用网络层协议层 端口27017/54321MongoDB-parserOracle-parserPGSQL-parser协议调度存储层文档数据关系数据向量数据 GIS数据等2.1 一体化架构的思路你看这个图里的结构。最上面是应用层。你可以用原来的MongoDB驱动连过来。也可以用KES自己的驱动连过来。到了网络层之后往下走就是协议层。这里它开了两个端口一个是27017这是MongoDB默认的端口。另一个是54321这是KES自己的端口。再往下看语法层这里放了各种解析器。有MongoDB-parser也有Oracle-parser、PGSQL-parser。这些解析器把不同的语法解析完之后统一交给协议调度去处理。最后落到存储层的时候不管是文档数据、关系数据还是向量数据全都放在一个库里面存着。2.2 MongoDB兼容版在这个架构里的位置那么这个MongoDB兼容版处在什么位置呢其实就是图里MongoDB-parser加上27017端口这一条路。它并不是单独起了一个新的数据库进程。而是直接在KES的实例里面加了一层协议的转换。这样做的好处是很明显的。你不需要再去维护一套独立的文档数据库了。技术栈直接收敛到了KES这一个产品上。对于企业层级里的应用来说管理起来轻松了很多。三、KES MongoDB兼容版的几个关键点我看资料的时候发现他们重点提了三个词。自主研发无风险、产品统一原生兼容、纵深防御更高安全。我给大家翻译成大白话。3.1 为什么不单独搞个文档库而是做兼容版现在有些厂商是单独拿一个开源的文档数据库去包装。但是这里面有个合规的风险。目前的安全名录里面其实没有单独的“缓存库”或者“文档库”这个品类去进行测试和认证。你用了这类产品后面验收的时候可能会扯皮。KES本身是拿到了最高安全认证的。它把文档处理做成内置能力那你就没有二次改造的风险了。再一个就是安全方面。原来用MongoDB安全防护措施往往仅仅只是做个权限控制。但是KES这边是从访问控制、身份鉴别到传输安全、存储安全再到事后的安全审计是一套完整的机制。这点在政企客户那里是非常看重的。3.2 原生协议到底是怎么兼容的这是我最关心的一点。它说支持MongoDB原生协议兼容支持零代码平替。底层到底是怎么搞的呢其实KES底层还是基于PostgreSQL内核做的。PostgreSQL本身就有很强的自定义类型能力。KES就是利用了这一点。它在底层建了一种类型来存BSON数据。我们来看一段MongoDB的插入操作代码。db.products.insertMany([...{item:card, qty:15},...{item:envelope, qty:20},...{item:stamps, qty:30}...]);你在客户端敲下这段代码通过27017端口发出去。KES接收到之后它会把MongoDB的数据转为关系表的数据。也就是说你在MongoDB里看到的collection在KES底层其实就是一张表。文档就是表里的一行。那个_id字段比如{ $oid : 6840285d64289defb9c1c18c }会自动创建一个B-TREE索引。如果你执行db.products.createIndex({item:1})它底层其实是给item字段建了一个RUM索引。这样处理的话应用层只需要改一下连接串的IP和端口。代码“零”修改。这就是它说的全栈兼容的文档数据库平替。四、具体能用到哪些命令和操作符光说原理不行平时干活靠的是具体的命令。我对照着资料里的清单给大家捋一捋。4.1 常用的CRUD和统计操作大家平时用的最多的就是增删改查。从资料里的对比表来看这些接口KES全支持。比如插入数据db.collection.insertOne和db.collection.insertMany都是支持的。查询文档的话db.collection.find和db.collection.findOne也没问题。更新和删除的那些updateOne、deleteMany之类的全都有。统计操作也是一样。db.collection.count、db.collection.distinct、db.collection.dataSize这些平时用来查状态、算数量的命令也都支持。4.2 查询、更新操作符的支持情况操作符不是单独的命令。它是写在查询条件里的。这个支持度怎么样呢我拉了几个常用的看看。对比查询操作符有32个KES支持了31个支持率96.88%。像$eq、$gt、$in、$lt这些对比的全支持。逻辑操作符$and、$or、$not、$nor全支持。元素判断的$exists、$type也支持。求值的$mod、$regex、$expr、$jsonSchema同样支持。再看看更新操作符。这个是22个全支持100%。什么$set改字段值$inc加数字$min、$max取极值$unset删字段。数组操作的那些$push、$pull、$addToSet、$pop也全都有。投影操作符3个100%支持。比如$slice限制返回数组元素的数量这个很常用。4.3 聚合管道的支持度聚合管道这块稍微复杂一点。命令支持率是100%。聚合管道阶段有38个支持了32个支持率84.21%。聚合管道操作符有169个支持了167个支持率98.82%。也就是说你平时写的大部分聚合查询直接拿过来跑是没问题的。比如$group、$match、$project这些阶段以及里面的$sum、$avg这些操作符。那么有哪些是不支持的呢比如“查询计划缓存”相关的4个命令支持率是0%。“角色管理”相关的10个命令在MongoDB兼容接口这里也是0%。但是注意了资料里也说了KES本身是带角色管理功能的。只是它没有去兼容MongoDB那套角色管理的命令语法。你可以通过KES自己的管理工具去建角色。这个其实无伤大雅。五、性能到底差多少大家肯定要问套了一层壳性能会不会拉胯资料里给了一组实测数据我直接贴出来大家自己看。5.1 1万条数据量的情况数据库数据量INSERT(ms)全表数据UPDATE(ms)全表数据SELECT(ms)全表数据SELECT(ms)全表单个字段SELECT(ms)标量查询SELECT(ms)范围查询MongoDB1万条数据10035241044kingbaseES with nativeAPI1万条数据1445238206115.2 10万条数据量的情况数据库数据量INSERT(ms)全表数据UPDATE(ms)全表数据SELECT(ms)全表数据SELECT(ms)全表单个字段SELECT(ms)标量查询SELECT(ms)范围查询MongoDB10万条数据39532878632728kingbaseES with nativeAPI10万条数据47354318615940495.3 100万条数据量的情况数据库数据量INSERT(ms)全表数据UPDATE(ms)全表数据SELECT(ms)全表数据SELECT(ms)全表单个字段SELECT(ms)标量查询SELECT(ms)范围查询MongoDB100万条数据227530832087365174228kingbaseES with nativeAPI100万条数据34986413332013322705585.4 怎么看待这个性能差距看完这三张表结论很明显。KES的MongoDB兼容版在性能上跟原生的MongoDB比确实是有差距的。数据量越大差距越明显。比如在100万条数据的时候全表UPDATE的操作MongoDB是3083毫秒KES是6413毫秒差了一倍左右。标量查询也差了大概三四倍。那这个情况能接受吗我觉得要分场景看。如果你的业务是那种极高并发的、纯缓存性质的读写可能确实会有压力。但是对于一般的企业层级里的应用来说大部分表的数据量可能也就停留在十万级以内。在这个量级下比如10万条数据标量查询差了十几毫秒范围查询差了二十毫秒。这个延迟在业务层面往往是感知不到的。而且你要想到你换来的是什么呢换来的是不用维护两套数据库。换来的是通过了安全认证。换来的是可以在同一个库里用SQL直接关联你的文档数据和关系数据。这个账不同项目得自己算。六、真要从MongoDB迁过来要怎么做如果评估下来觉得可以搞那下一步就是怎么迁了。这里不涉及数据迁移工具的讨论单纯看怎么把KES实例配成一个能接MongoDB请求的状态。步骤其实不多但是每一步都很关键。6.1 初始化实例的时候要注意什么第一步是初始化数据库。这里有一个坑要注意。执行initdb的时候必须加上-m参数指定为兼容pg模式。同时还要指定默认用户一般是-U system。如果不加这个参数后面再想改就麻烦了。6.2 改配置项的那些事初始化完之后就要去改配置文件了。配置文件是kingbase.conf。你需要改下面这几个参数。enable_protocol_compatonextension_protocol_port27017documentdb_core.bsonUseEJsonon我解释一下这几个参数是干嘛的。enable_protocol_compaton这个一看就知道是把协议兼容的功能打开。extension_protocol_port27017这是指定兼容协议监听的端口。MongoDB默认就是27017你写这个的话应用那边基本就不用改连接端口了。documentdb_core.bsonUseEJsonon这个是让BSON类型使用扩展JSON的格式。因为底层的PG对JSON处理有自己的方式开这个能保证数据解析不出错。除了这三个还有一个很重要的。就是在shared_preload_libraries这一项的后面要追加三个东西。kdb_cron,kdb_documentdb_core,kdb_documentdb这是预加载的动态库。你必须把这三个写进去数据库在启动的时候才会把MongoDB兼容的核心组件加载到内存里。改完这些重启数据库服务。6.3 建插件和连上去的步骤重启完之后就可以进数据库里建插件了。你用ksql工具连上去连的是54321那个原生端口。ksql –Usystem-p54321dbname进去之后执行建插件的命令。create extension documentdb cascade;这里有个cascade参数。意思是把它依赖的那些插件也一起建了。省得你一个一个去建。接着你要给system用户设个密码。因为MongoDB连接的时候需要认证。alter user system with password123456;做完这些KingbaseES数据库就处于兼容mongodb模式了。这个时候你拿出mongosh客户端直接连就行。连接串是这样的。mongoshmongodb://system:123456127.0.0.1:27017/dbname?maxPoolSize1directConnectiontrueauthMechanismSCRAM-SHA-256你看这个连接串IP是127.0.0.1端口是27017认证机制是SCRAM-SHA-256。这跟连一个真正的MongoDB没有任何区别。你连上之后敲db.collection.find()就能把刚才建的表里的数据查出来。总结其实写到这里大家应该对KES V9的MongoDB兼容版有个清晰的认识了。它不是一个重新造轮子的文档数据库。它是站在KES成熟的关系型数据库底座上通过协议解析转换硬生生抠出来的一套MongoDB兼容层。这种做法的好处是稳。因为底层的存储、事务、备份恢复全都是KES原来那套经过多年验证的东西。你不用去担心一个新的文档库在数据可靠性上出什么幺蛾子。缺点也有。就是性能上面毕竟多了一层转换跟原生的比肯定有损耗。聚合管道和一些偏门的管理命令也没有做到100%覆盖。但是回到我们最开始说的那个问题。很多项目现在要的是合规要的是减少技术栈要的是能过验收。在这个前提下KES的MongoDB兼容版提供了一条非常直接的路径。你改个连接串把应用跑起来测试通过这就完事了。对于一线干活的兄弟们来说这其实就是一个很实在的平替方案。大家如果在项目里也遇到类似的需求不妨拿个测试环境搭一下跑跑看毕竟实践出真知嘛。

相关新闻

【CarbonData】CarbonData 的安全模型是怎样的?如何与 Kerberos、Ranger 等安全框架集成?

【CarbonData】CarbonData 的安全模型是怎样的?如何与 Kerberos、Ranger 等安全框架集成?

CarbonData 安全模型深度解析:与 Kerberos、Ranger 的生产级集成实践 用户问题原文:“CarbonData 的安全模型是怎样的?如何与 Kerberos、Ranger 等安全框架集成?” 在金融、电信等高度监管的行业中,数据安全不是锦上添花的功能,而是系统设计的基石。任何数据平台都必须满…

2026/8/8 12:13:23 阅读更多 →
揭秘北京服饰网站建设背后的真相,为什么90%的商家在这个关键环节翻车了

揭秘北京服饰网站建设背后的真相,为什么90%的商家在这个关键环节翻车了

做服饰生意的朋友,咱们坐下来聊聊天。我知道,现在的圈子不容易。线上流量贵得离谱,线下客流被电商分流,大家都在找出路。很多人觉得,只要我衣服好看,款式新,肯定能卖出去。这话没错,但在那个“酒香也怕巷子深”的年代,光有好货是不够的。你得让人看见你,得让人信任你…

2026/8/8 12:13:23 阅读更多 →
Miniconda安装配置全攻略:从零掌握Python虚拟环境管理

Miniconda安装配置全攻略:从零掌握Python虚拟环境管理

1. 项目概述:为什么我们需要Anaconda/Minconda? 如果你刚开始接触Python,或者已经写了一些脚本,但被各种包依赖、版本冲突搞得焦头烂额,那么你大概率需要一个环境管理工具。Anaconda和它的轻量版兄弟Miniconda&#xf…

2026/8/8 12:13:23 阅读更多 →

最新新闻

YOLO模型对比与LLM集成:构建鲁棒疲劳驾驶识别系统实践指南

YOLO模型对比与LLM集成:构建鲁棒疲劳驾驶识别系统实践指南

在实际的智能驾驶和工业安全监控场景中,疲劳驾驶识别是一个典型且关键的计算机视觉应用。单纯依赖单一的目标检测模型,往往难以应对复杂多变的真实环境,例如光照变化、驾驶员姿态多样、遮挡以及模型对不同疲劳特征(如闭眼、打哈欠…

2026/8/8 13:07:58 阅读更多 →
Qwen3.8 Max开源大模型部署实战:从环境准备到生产级应用

Qwen3.8 Max开源大模型部署实战:从环境准备到生产级应用

如果你最近在关注开源大模型,可能会发现一个有趣的现象:当大家还在讨论 DeepSeek-V4 Flash、GLM-5.2 和 Kimi K3 谁更强时,一个熟悉的名字带着新的后缀杀了回来—— Qwen3.8 Max 。 这不是一次简单的版本迭代。根据官方发布前的评测数据&a…

2026/8/8 13:07:58 阅读更多 →
毕业论文高效写作:四步搞定初稿与智能工具应用

毕业论文高效写作:四步搞定初稿与智能工具应用

1. 毕业论文初稿高效写作指南 作为一名经历过毕业论文折磨的过来人,我深知deadline前熬夜改稿的痛苦。最近发现了一套四步搞定毕业论文初稿的实用方法,从图表制作到排版规范再到AI率检测都能一键完成,特别适合时间紧迫的毕业党。这套方法的核…

2026/8/8 13:07:58 阅读更多 →
终极解决方案:如何用Ice免费开源工具彻底整理你的macOS菜单栏

终极解决方案:如何用Ice免费开源工具彻底整理你的macOS菜单栏

终极解决方案:如何用Ice免费开源工具彻底整理你的macOS菜单栏 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 你是不是经常被macOS菜单栏上密密麻麻的图标搞得心烦意乱?随着应…

2026/8/8 13:07:58 阅读更多 →
从零构建AI对话服务:工程化实践指南

从零构建AI对话服务:工程化实践指南

在 AI 技术快速演进和行业格局剧烈变动的背景下,技术团队如何构建稳定、可迭代的工程体系,比追逐单一的技术热点更为重要。无论是前沿的 AGI 研究,还是落地的 AI 应用开发,其最终价值都需要通过扎实的工程实践来交付和验证。这意味…

2026/8/8 13:07:58 阅读更多 →
让老Mac焕发新生:OpenCore Legacy Patcher完整操作指南

让老Mac焕发新生:OpenCore Legacy Patcher完整操作指南

让老Mac焕发新生:OpenCore Legacy Patcher完整操作指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为2015年前的Mac无法升级最新macOS而苦…

2026/8/8 13:06:57 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →