CMDB数据库设计-四种方案任你选

本文探讨了CMDB(配置管理数据库)的设计方案,包括动态字段、动态表、固定冗余字段及固定表和字段等四种方案。每种方案都有其优势与不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【转自:http://kiral.iteye.com/blog/789467】

最近在做CMDB的数据库设计方案,有4种方案,各有利弊,我选方案3,大家可以讨论下,或者有什么更好的方案,请指教! 
  

 

术语

英文全称

说明

配置管理数据库(CMDB)

Configuration Management Database

它是一种包含每一个配置项全部关联细节以及配置项之间重要关联细节的数据库

配置项(CI)

Configuration Item

配置项信息覆盖了企业网络中的应用、操作系统、补丁、硬件设备、生命周期成本以及用户链接

配置项分类

Configuration item category

配置项所属分类,如数据库,主机




 

设计难点:每个配置项分类的属性会不一样。如数据库有管理员名称和管理员密码属性,显示器有分辨率和尺寸属性。 数据库是配置项分类,分辨率是配置项属性。

 

 

1:方案一:动态字段数据库设计

 

 

方案说明:

CMDB由三个实体组成,即配置项,配置项分类,配置项属性定义。

每增加一个配置项属性,会动态的在配置项表里增加一个扩展字段,扩展字段以EP作为前缀。

没删除一个配置项属性,会动态的在配置项表里删除这个扩展字段。

所有扩展字段必须可空。

方案优点:

灵活,且方便查询。

方案缺点:

1:需要建立表分区:当配置项达到上千万的数据的时候,为了提高性能,必须在配置项表的配置类型字段上建立表分区,而不是所有的数据库都支持表分区。但当数据量在百万左右的时候,可以通过建立索引来挺高查询性能。

2:配置项表扩展字段太多:因为每增加一个配置项属性,就会在配置项表增加一个可空字段,所以配置项表的字段会非常多,预计最多在1000左右。所有的数据库对单列的长度都有限制,如MySql单列字段长度为65535

 

2:方案二:动态表数据库设计

 

方案说明:

CMDB由三个实体组成,即配置项,配置项分类,配置项属性定义。表结构类似方案1

为每一个配置项分类(叶子分类)建立一张表。如为数据库,路由器,防火墙单独建立一张表

方案优点:

性能高:数据按照配置项分类存在不同的表里插入和查询效率高。

方案缺点:

1. 需要创建的表非常多。如果管理粒度非常细,需要创建几百张表。如到windows操作系统,锐捷路由器这一层。当配置项的数据达到千万级的时候,有的配置项表也会达到百万级。

2. 需要动态创建表,随着管理粒度的细化,需要动态创建表。如项目一期的分类为三层,即硬件-设备-路由器,然后到项目三期的时候分类变为四层,即硬件-设备-路由器-Ruijie路由器(cisico,juniper,huawei

 

3:方案三:固定冗余字段数据库设计

 

方案说明:

CMDB由三个实体组成,即配置项,配置项分类,配置项属性定义。

在配置项表里增加200个固定的冗余字段,并在配置项类型和属性关系表里增加一个字段,建立属性和扩展字段之间的关系,据实际情况表明一个配置项分类的扩展属性不会大于200

冗余字段里以FS作为前缀的字段表示字符串型,FN表示数字型,FD表示日期型。

冗余字段的分配比率为FS>FN>FD 5:4:1

相对于全部使用字符串存储的优势在于整个表的体积会缩小。缺点在于分配时比较麻烦,有可能出现某个类型不够的情况,如date类型不够用就得用String字段。

冗余字段的长度:原则为定义为各个数据库能够容纳的最大值,将FS定义为varchar2000 各数据库最大长度为 SQLservervarchar  8000mysql varchar  65535Oraclevarchar最大2000varchar2最大是4000)

在存储上不会受影响,因为varchar是可变长存储的。查询和插入上的效率取决于存储数据的大小。

各控件的数据存储

文本框是数字型的存在FI里。

文本框(input),复选框(checkbox),单选框(radio),下拉框(select),文本域(textarea)全部存储在FS里。如果出现数据字典的键值对,直接存值,如1=上海,2=北京,3=福州,直接存上海,北京,福州。

日期控件(date),存在FD里。

 

删除某个属性时,需先删除属性和F_N的关系,再删除F_N列的数据,F_N列都是可空列。

方案优点:

方便查询。

且规避了方案一的配置项表扩展字段太多的缺点。

方案缺点:

没有方案一灵活

 

4:方案四:固定表和字段数据库设计

方案说明:

CMDB由两个个实体组成,即配置项(含配置项分类),配置项属性定义。

配置项属性的值存在“配置项类型和属性关系表”里。

方案优点:

简化了设计。

配置项也可以动态增加扩展属性。

方案缺点:

1. 配置项和配置分类放在一张表里,频繁的查询配置项分类存在性能问题。建立索引能够解决性能问题,但是配置项的表是千万级数据量,在多个字段处建立索引,会导致索引文件非常大,并且影响数据查询性能。

2. 使用列存储配置的属性和值,当出现统计查询的时候,查询语句非常难写。

 


<think>我们正在解决一个Maven仓库中的文件重命名问题。用户提供了一个具体的路径:尝试将`.tmp`文件重命名为`.jar`文件时出现问题。根据引用[1]中的内容,用户可能是在Linux环境下配置了Maven(步骤涉及Linux命令),但当前问题描述是Windows路径(D:\...),所以环境可能是Windows。问题分析:用户的操作可能是通过Maven下载依赖时,Maven会先下载临时文件(.tmp),然后重命名为正式文件(如.jar)。如果重命名失败,可能是由于文件被占用、权限不足或路径错误等原因。具体错误:`D:\ProgramFiles\java\repository\com\bdbada\cmdb-model\1.3\cmdb-model-1.3.jar.tmp`重命名为`D:\ProgramFiles\java\repository\com\bdbada\cmdb-model\1.3\cmdb-model-1.3.jar`失败。可能的解决方案:1.检查文件是否被占用:确保没有其他程序(如Java应用、IDE)正在使用这个文件。关闭可能使用该文件的程序,特别是IDE(如IntelliJIDEA或Eclipse),然后重试。2.检查权限:确保当前用户对目标目录(D:\ProgramFiles\java\repository\com\bdbada\cmdb-model\1.3)有读写权限。在Windows中,ProgramFiles目录通常需要管理员权限。3.手动重命名:尝试手动重命名文件(在资源管理器中),看是否出现错误提示。4.临时文件可能不完整:如果下载过程中断,临时文件可能不完整,导致无法重命名。可以删除该临时文件,然后让Maven重新下载。5.路径长度限制:Windows路径有长度限制(260个字符),检查路径是否过长。可以尝试将仓库移到更靠近根目录的位置(如D:\maven_repo)并在settings.xml中修改localRepository。6.使用管理员权限:如果权限不足,尝试以管理员身份运行命令行或IDE。注意:在引用[1]中,用户配置了本地仓库(localRepository)为`/usr/local/develop/maven/maven_local_repository`,这是Linux路径。而当前问题路径是Windows风格。所以,用户可能是在两个不同的系统中操作,或者只是参考了之前的配置。当前问题的环境是Windows,因此需要按照Windows的解决方案。根据用户需求,他可能是在使用Maven时遇到下载依赖后重命名失败的问题。我们可以建议:-检查当前Maven配置的本地仓库路径(settings.xml中的localRepository)是否与当前操作的路径一致?因为引用[1]中配置的是Linux路径,而现在操作的是Windows路径,可能是配置错误。建议步骤:1.检查当前Maven的settings.xml中配置的本地仓库路径,确保是当前操作系统下的正确路径(在Windows中,路径应该是`D:\...`的形式,而不是`/usr/...`)。2.如果配置正确,再按照上述可能的原因进行排查。操作流程:-打开Maven的settings.xml(通常在Maven安装目录的conf目录下,或者用户主目录的.m2目录下),检查`<localRepository>`设置。-如果发现配置的是Linux路径,修改为Windows路径,例如:`<localRepository>D:\ProgramFiles\java\repository</localRepository>`但是注意,路径中包含空格(ProgramFiles),在XML中这样写没有问题。但是,为了避免空格可能带来的问题,建议使用不带空格的路径,例如`D:\java\repository`,并在settings.xml中修改,然后重新下载依赖。如果问题依然存在,可以尝试以下步骤:1.关闭所有可能占用文件的程序(包括IDE)。2.手动删除出问题的目录(例如`com\bdbada\cmdb-model\1.3`),然后重新构建项目,让Maven重新下载。另外,如果是在IDE中操作,可以尝试:-在IDE中执行Maven命令时,以管理员身份运行IDE(特别是如果仓库路径在ProgramFiles下,需要管理员权限)。-在IDE中清理Maven本地仓库缓存(一些IDE提供这个功能,或者使用Maven命令`mvndependency:purge-local-repository`)。最后,如果路径太长,考虑修改仓库位置到较短的路径,并更新settings.xml。总结:先确认配置正确,再检查文件占用、权限、路径长度等问题。根据用户问题,生成相关问题:1.如何修改Maven的本地仓库路径?2.Maven下载依赖时出现权限错误如何解决?3.如何在Windows中为文件夹添加写权限?4.如何以管理员身份运行IDE?5.Maven临时文件的作用是什么?6.如何避免Windows路径长度限制?7.Maven下载依赖失败的其他常见原因?注意:我们的回答要聚焦在重命名问题上,但生成的这些问题可以帮助用户扩展了解。</think> ### 文件重命名问题分析与解决方案 您的核心问题是:Maven依赖下载过程中临时文件(`.tmp`)无法重命名为正式文件(`.jar`)。根据您提供的路径 `D:\Program Files\java\repository\...`,这是Windows系统的路径,与引用[1]的Linux环境不同。以下是逐步解决方案--- ### 原因分析 1. **文件占用锁定**:最常见原因(90%+案例) - IDE(如IntelliJ/Eclipse)或其他进程可能正在占用该文件 - Java进程可能未完全释放文件句柄 2. **权限问题** - 系统对 `Program Files` 目录有特殊权限要求 - 当前用户缺乏写权限 3. **路径长度限制** - Windows默认路径长度限制为260字符 - 您的路径长度:`D:\Progr~1\java\repos~1\com\bdbada\cmdb-model\1.3\cmdb-model-1.3.jar` 已接近临界值 --- ### 解决方案 #### 方法一:解除文件占用 ```powershell # 1. 关闭所有Java进程和IDE taskkill /F /IM java.exe taskkill /F /IM javaw.exe # 2. 手动重命名(管理员权限运行) cd "D:\Program Files\java\repository\com\bdbada\cmdb-model\1.3" rename cmdb-model-1.3.jar.tmp cmdb-model-1.3.jar ``` #### 方法二:修改Maven仓库位置 1. 创建更短的仓库路径: ```powershell mkdir C:\m2_repo ``` 2. 修改 `settings.xml`: ```xml <localRepository>C:\m2_repo</localRepository> ``` #### 方法三:权限修复 1. 右键单击目标目录 → 属性 → 安全 2. 添加当前用户并授予 **完全控制权限** 3. 勾选 **替换所有子对象的权限项** #### 方法四:Windows路径长度限制解除 ```powershell # 管理员权限运行 reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f ``` 重启后生效(需Windows 10 v1607+) --- ### 预防措施 1. 在构建命令后添加清理操作: ```bash mvn clean install && taskkill /F /IM java.exe ``` 2. IDE配置建议: ```xml <!-- 在pom.xml中添加 --> <properties> <maven.jvm.args>-XX:MaxFileHandles=4096</maven.jvm.args> </properties> ``` > **重要提示**:如果`.tmp`文件小于正常JAR包(如只有几KB),可能是下载中断导致的损坏文件,建议删除后重新执行 `mvn dependency:purge-local-repository` --- ### 相关问题 1. 如何永久解决Maven文件锁定问题? 2. Windows环境下如何优化Maven仓库路径? 3. 为什么Maven下载依赖会生成.tmp文件? 4. 如何验证Maven仓库文件的完整性? 5. IntelliJ/Eclipse如何配置避免文件锁定? 6. 跨平台(Win/Linux)的Maven仓库配置最佳实践是什么? [^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值