蓝鲸 CMDB 内置模型数据表全解:cc_BizSetBase / cc_HostBase / cc_ProjectBase 集合结构剖析
后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载本文以 docs/db/built-in_model.md 为主体系统讲解蓝鲸配置平台BlueKing CMDB中业务集、主机、项目这三类内置模型在 MongoDB 中的底层集合结构。你将掌握cc_BizSetBase中bk_scope范围过滤规则的三层嵌套结构、cc_HostBase中 IP 与 Agent ID 的唯一性约束实现以及cc_ProjectBase的字段语义与索引设计同时结合src/common下的源码厘清内置模型表与用户自定义模型分表之间的存储关系为二次开发、数据巡检与运维排障提供直接依据。一、前置认知MongoDB 集合与表结构文档的关系蓝鲸 CMDB 底层使用 MongoDB 进行数据存储。MongoDB 是面向文档的数据库没有传统关系型数据库意义上的表而是以**集合Collection和文档Document**组织数据。因此 docs/db/README.md 中明确说明本目录下文档中涉及的表结构和字段解释仅供参考请以实际环境中的结构为准。内置模型是 CMDB 中最核心的一类模型包括业务、业务集、集群、模块、主机、进程、管控区域、项目等。这些模型的实例数据并不存放在通用的实例分表中而是存放在各自的内置集合中集合名在源码中通过常量统一定义BKTableNameBaseBizSet cc_BizSetBaseBKTableNameBaseHost cc_HostBaseBKTableNameBaseProject cc_ProjectBase参见 src/common/tablenames.go。同时src/common/definitions.go 定义了这些内置模型的对象 ID业务集为bk_biz_set_obj、主机为host、项目为bk_project配合GetInstTableName将对象 ID 映射到对应集合见 src/common/tablenames.go。一个关键设计是内置集合仅保存模型内置的预定义字段而用户在模型上扩展的自定义属性字段会动态叠加到同一文档中。下文每一节的注意都强调了这一点——表结构取决于用户在模型中定义的属性字段。二、cc_BizSetBase业务集信息集合2.1 作用cc_BizSetBaseBKTableNameBaseBizSet用于存放业务集信息。业务集是 CMDB 中对多个业务biz进行聚合管理的逻辑单元通过bk_scope描述其包含的业务范围。2.2 集合结构字段类型描述_idObjectId数据唯一IDbk_biz_set_idNumberLong业务集idbk_biz_set_nameString业务集名称bk_biz_set_descString业务集描述bk_biz_maintainerString维护者bk_scopeObject业务集范围defaultNumberLong是否是默认业务集1代表是0代表否bk_supplier_accountString开发商IDcreate_timeISODate创建时间last_timeISODate最后更新时间注意此处仅对业务集内置的模型字段做说明业务集表结构字段取决于用户在业务集模型中定义的属性字段。这一结构与源码中的BizSetInst结构体一一对应见 src/common/metadata/inst.go其中Scope BizSetScope对应bk_scopeDefault int64对应default字段。字段常量在 src/common/definitions.go 中定义BKBizSetIDField、BKBizSetNameField、BKBizSetScopeField bk_scope、BKBizSetMatchField match_all。2.3 bk_scope 字段结构业务集范围的过滤规则bk_scope是业务集的核心字段决定该业务集包含哪些业务。其结构分为三层第一层bk_scope字段类型描述match_allBoolean是否包含所有业务filterObject所包含业务的条件规则第二层bk_scope.filter字段类型描述conditionString规则操作符rulesArray过滤节点的范围规则第三层bk_scope.filter.rules过滤规则为三元组field、operator、value字段类型描述fieldstring字段名operatorstring操作符value-操作数不同的 operator 对应不同的 value 格式2.4 源码级校验bk_scope 的合法性约束bk_scope并非自由拼装而是经过严格校验后才允许入库。BizSetScope的校验逻辑定义在 src/common/metadata/toposerver.go要点如下match_all与filter互斥当match_all为true时filter必须为空当match_all为false时filter必须设置。二者同时存在或同时缺失都会报错。条件深度固定为 2 层scope.Filter.GetDeep()必须等于common.BizSetConditionMaxDeep即过滤条件最多嵌套两层。仅支持CombinedRule且组合条件必须为ANDfilter.condition取值只能是AND保证子条件之间是与的关系。叶子规则AtomRule仅支持equal与in两个操作符这意味着业务集范围规则只能用等于某个值或属于某集合来表达不允许使用大小比较、模糊匹配等操作符。从实现上看filter的类型是*querybuilder.QueryFilter其规则体系定义在 src/common/querybuilder/types.goAtomRule{Field, Operator, Value}为叶子规则CombinedRule{Condition, Rules}为组合规则condition支持AND/OR操作符枚举包括equal、not_equal、in、not_in、less、greater、contains、begins_with、is_empty、is_null、exist等。规则在落库前还会通过ToMgo()转换为 MongoDB 查询条件如equal→$eq、in→$in、contains→ 正则$regex见 src/common/querybuilder/types.go。创建业务集时CreateBizSetRequest还会强制要求bk_biz_set_name必填见 src/common/metadata/toposerver.go。2.5 集合索引cc_BizSetBase的索引注册在 src/common/index/collections/business_set.go包含bk_biz_set_id上的唯一索引CCLogicUniqueIdxNamePrefix biz_set_idbk_biz_set_name上的唯一索引业务集名称全局唯一bk_biz_set_id bk_biz_set_name bk_supplier_account上的普通组合索引。三、cc_HostBase主机信息集合3.1 作用cc_HostBaseBKTableNameBaseHost是 CMDB 中最重要、数据量最大的集合之一用于存放主机信息。主机是资产管理的核心对象其上承载了 IP、Agent、云厂商、CPU/内存/磁盘等大量属性。3.2 集合结构字段类型描述_idObjectId数据唯一IDbk_os_nameString操作系统名称bk_addressingString寻址方式import_fromString录入方式bk_slaStringSLA级别bk_cpu_moduleStringCPU型号bk_host_innerip_v6String Array内网IPv6bk_agent_idStringGSE Agent IDbk_cloud_host_identifierBoolean云主机标识bk_os_bitString操作系统位数bk_snString设备SNbk_host_outeripString Array外网IPbk_service_termNumberLong质保年限bk_state_nameString所在国家bk_macString内网MAC地址bk_cloud_inst_idString云主机实例IDbk_cpu_architectureStringCPU架构bk_os_versionString操作系统版本operatorString Array主要维护人bk_os_typeString操作系统类型bk_host_idNumberLong主机idbk_cloud_idNumberLong管控区域idbk_commentString备注bk_cloud_host_statusNumberLong云主机状态bk_bak_operatorString Array备份维护人bk_province_nameNumberLong所在省份bk_isp_nameString所属运营商bk_diskNumberLong磁盘容量(GB)bk_outer_macString外网MACbk_stateString当前状态bk_host_outerip_v6String Array外网IPv6bk_host_nameString主机名称bk_asset_idString固资编号bk_cloud_vendorString云厂商bk_host_inneripString Array内网IPbk_cpuNumberLongCPU逻辑核心数bk_memNumberLong内存容量(MB)bk_supplier_accountString开发商IDcreate_timeISODate创建时间last_timeISODate最后更新时间注意此处仅对主机内置的模型字段做说明主机表结构字段取决于用户在主机模型中定义的属性字段。3.3 关键字段语义补充bk_host_innerip/bk_host_outerip是数组类型String Array一台主机可能拥有多个内网 IP 或外网 IP因此字段以数组形式存储IPv6 地址单独存放在bk_host_innerip_v6/bk_host_outerip_v6中。相关字段常量定义于 src/common/definitions.go 与 src/common/definitions.go。bk_agent_idGSE Agent ID用于唯一标识一台已安装 GSE Agent 的主机是 CMDB 与 GSE 管控体系对接的桥梁。bk_addressing寻址方式取值定义在源码中static表示静态寻址、dynamic表示动态寻址见 src/common/definitions.go。该字段直接参与主机唯一性约束见下文索引说明。bk_cloud_id管控区域 id对应cc_PlatBase中的管控区域主机必须归属某个管控区域。import_from录入方式记录主机来源如手动录入、Excel 导入、API 导入、云资源同步等。3.4 集合索引IP 与 Agent ID 的唯一性约束主机集合的索引定义在 src/common/index/collections/hostbase.go是理解 CMDB 主机数据一致性的关键bk_host_innerip bk_cloud_id唯一索引保证同一管控区域内静态寻址主机的内网 IP 不重复。通过PartialFilterExpression部分过滤索引限定仅对bk_addressing static的主机生效——即只有静态寻址主机才要求内网 IP 管控区域唯一。bk_host_innerip_v6 bk_cloud_id唯一索引与上一条同理针对 IPv6 地址同样仅约束静态寻址主机。bk_agent_id唯一索引保证一个 Agent ID 只能对应一台主机部分过滤条件bk_agent_id 允许未安装 Agent的多台主机同时存在空 Agent ID。此外还注册了一批历史兼容索引bk_host_name_1、bk_host_innerip_1、idx_unique_hostID、bk_cloud_id_1等见 src/common/index/collections/hostbase.go初始化时通过registerIndexes统一注册src/common/index/collections/hostbase.go。四、cc_ProjectBase项目信息集合4.1 作用cc_ProjectBaseBKTableNameBaseProject用于存放项目信息。项目是 CMDB 面向容器/云资源管理场景引入的一级组织单元对象 ID 为bk_project用于将资源按项目维度进行隔离与管理。4.2 集合结构字段类型描述_idObjectId数据唯一IDidNumberLong自增IDbk_project_idString项目IDbk_project_codeString项目英文名bk_project_typeString项目类型bk_project_ownerString项目负责人bk_project_nameString项目名称bk_project_descString项目描述bk_project_sec_lvlString保密级别bk_statusString项目状态bk_supplier_accountString开发商IDcreate_timeISODate创建时间last_timeISODate最后更新时间注意此处仅对项目内置的模型字段做说明项目表结构字段取决于用户在项目模型中定义的属性字段。字段常量在 src/common/definitions.go 中定义包括bk_project_id、bk_project_name、bk_project_code、bk_project_desc、bk_project_type、bk_project_sec_lvl、bk_project_owner、bk_status等此外还存在bk_project_team项目团队与bk_project_icon项目图标字段定义。4.3 集合索引与写入限制索引设计cc_ProjectBase的索引注册在 src/common/index/collections/project.go包括id、bk_project_id、bk_project_name、bk_project_code上的四个唯一索引自增 ID、项目 ID、项目名称、项目英文名均全局唯一以及bk_status上的普通索引。批量写入限制创建项目接口CreateProjectOption与更新项目接口UpdateProjectOption均将单次写入/更新的条数上限限制为common.BKWriteOpLimit其值为 200定义于 src/common/definitions.go超出即返回参数个数超出限制错误见 src/common/metadata/toposerver.go。五、内置模型表与实例分表的关系理解了上述三张集合后还需要厘清它们在整个 CMDB 存储体系中的位置。CMDB 的模型实例数据分为两类存储路径见 src/common/tablenames.go内置模型实例业务、业务集、主机、模块、集群、进程、管控区域、项目等写入各自的固定集合即本篇文章介绍的cc_BizSetBase、cc_HostBase、cc_ProjectBase以及cc_ApplicationBase业务、cc_SetBase集群、cc_ModuleBase模块、cc_Process进程、cc_PlatBase管控区域等。映射关系由GetInstTableName统一完成。用户自定义模型实例写入按开发商与对象 ID 动态生成的分表命名格式为cc_ObjectBase_{supplierAccount}_pub_{objectID}如cc_ObjectBase_0_pub_switch对应GetObjectInstTableName的实现。因此业务集、主机、项目这三张表承载的只是内置预定义字段用户在这些模型上新增的扩展属性虽然也物理存储在同一个文档中但字段集合是动态、可变化的——这正是阅读本文各节注意提醒时需要牢记的核心规则。六、实践建议如何核对这三张集合需要查看实际结构时可以通过 MongoDB shell 连接 CMDB 的存储库执行db.cc_BizSetBase.findOne()、db.cc_HostBase.findOne()、db.cc_ProjectBase.findOne()观察真实文档字段参考 docs/db/README.md 中以实际环境中的结构为准的说明。排查主机重复录入问题时重点检查cc_HostBase上bk_host_innerip bk_cloud_id唯一索引与bk_agent_id唯一索引是否生效源码入口在 src/common/index/collections/hostbase.go。业务集bk_scope的过滤规则若校验失败可对照 src/common/metadata/toposerver.go 的BizSetScope.Validate()检查是否违反了match_all 与 filter 互斥、深度为 2、仅 AND 组合、仅 equal/in 操作符四条约束。上述所有字段、约束与索引均可从当前仓库src/common目录下的常量定义、数据结构与索引注册代码中逐一溯源验证。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸CMDB数据模型设计终极指南深入理解配置平台的核心数据结构蓝鲸CMDB数据模型设计终极指南深入理解配置平台的核心数据结构 蓝鲸CMDB配置管理数据库是蓝鲸智云体系中的核心组件为企业级IT环境提供强大的配置管理能后端企业应用运维蓝鲸 CMDB 更新模型分类接口实战update_classification 全解析蓝鲸 CMDB 更新模型分类接口实战update_classification 全解析 导读 模型分类Model Classification是蓝鲸配置平后端企业应用运维蓝鲸CMDB模型管理完全手册从内置模型到自定义扩展终极指南蓝鲸CMDB模型管理完全手册从内置模型到自定义扩展终极指南 蓝鲸CMDB配置管理平台作为企业级IT资产管理的中枢系统其强大的模型管理功能为各类IT资源提供了后端企业应用运维上一篇如何在macOS上无缝运行Windows程序Whisky现代Wine封装方案深度解析下一篇怎样在macOS上轻松运行Windows程序Whisky实用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

PS5扩容实战:任意型号通用M.2 SSD安装与散热方案

PS5扩容实战:任意型号通用M.2 SSD安装与散热方案

前阵子我手头攒了几台不同型号的PS5,光驱版、数字版都有,平时做游戏录像和素材整理时,最头疼的就是内置存储动不动就满了。官方推荐的扩容SSD价格又高,第三方配件水还深,散热马甲买薄了压不住,买厚了盖不上…

2026/10/15 8:50:00 阅读更多 →
国产 EMI 滤波器件新突破:成都容瓷电子 2016 型穿心电容器,小封装实现高容高耐压,支持多参数自由定制

国产 EMI 滤波器件新突破:成都容瓷电子 2016 型穿心电容器,小封装实现高容高耐压,支持多参数自由定制

在高速、高密度电子系统 EMI 抑制设计中,穿心电容器是电源端口、信号接口最核心的滤波器件之一。但微型化整机设计长期面临一个工程矛盾:PCB 预留安装空间受限,同时电路对器件的耐压、有效滤波容值以及宽温适应性提出较高指标。传统进口穿心电…

2026/10/15 8:50:00 阅读更多 →
用seq2seq做ECG心拍分类:跨患者泛化的新思路

用seq2seq做ECG心拍分类:跨患者泛化的新思路

先说结论:这篇论文是我近期读到的心电(ECG)心拍分类方向里,思路比较“反直觉”但逻辑上很自洽的一篇。它没有追求更深的卷积网络,也没有堆注意力机制,而是把一个在自然语言处理里已经快被视作“常规操作”的…

2026/10/15 8:50:00 阅读更多 →

最新新闻

大型语言模型全解读:转换器、预训练、微调与实战避坑

大型语言模型全解读:转换器、预训练、微调与实战避坑

简介:这是一份面向自然语言处理初学者与大模型应用开发者的全景式大型语言模型解读PDF,内容覆盖LLM定义、Transformer架构、编码器-解码器结构、自注意力机制与单词嵌入原理,并延伸到预训练、微调、零样本和少样本学习等关键环节。正文按定义…

2026/10/15 14:02:53 阅读更多 →
纯C++从零手写CNN:彻底搞懂卷积与反向传播原理

纯C++从零手写CNN:彻底搞懂卷积与反向传播原理

简介:这份资源面向深度学习初学者与具备一定C基础的开发者,用纯C从零实现卷积神经网络与全连接神经网络,并在MNIST手写数字数据集上完成训练与精度验证,帮助读者绕开框架黑盒、直击底层原理。压缩包共30个文件,约11MB&…

2026/10/15 14:02:53 阅读更多 →
Android外接USB摄像头实战:UVC协议接入与视频预览排坑指南

Android外接USB摄像头实战:UVC协议接入与视频预览排坑指南

简介:面向Android底层开发与USB外设接入方向的C/C项目资源,对应Android-UVC-Camera应用,用于通过OTG连接UVC摄像头并实现视频流采集。项目基于Android Studio构建,适配Micro USB与Type-C接口,并集成LibUsb以改善标准US…

2026/10/15 14:02:53 阅读更多 →
光追加速结构全解析:从BVH到SAH的工程实践

光追加速结构全解析:从BVH到SAH的工程实践

开头(我会让文章足够长)做光追渲染的人,不管是写离线渲染器还是搞实时光追,迟早都会撞上同一个瓶颈:求交太慢了。场景里几十万上百万个三角形,每根光线都要逐一去试,项目一上手就跑不动&#xf…

2026/10/15 14:02:53 阅读更多 →
分数阶累加Python实现:从整数阶到实数阶的边界处理与性能优化

分数阶累加Python实现:从整数阶到实数阶的边界处理与性能优化

1. 从整数阶累加到分数阶:一个被低估的数学工具很多人第一次听到"分数阶累加"这个词,第一反应是:累加不就是求和吗?1234,哪来的分数阶?这个反应非常正常,因为我们在学校接触的累加几乎…

2026/10/15 14:02:53 阅读更多 →
如何从零构建Helium-linux:Docker容器化编译环境完整教程

如何从零构建Helium-linux:Docker容器化编译环境完整教程

【免费下载链接】helium-linux Helium Browser for Linux 项目地址: https://gitcode.com/gh_mirrors/he/helium-linux 点击查看 免费下载 helium-linux 是 Helium Browser(隐私优先的 Chromium 系浏览器)的 Linux 构建、打包与开发工具仓库…

2026/10/15 14:01:48 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →