职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 2485|回复: 5

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

[复制链接]
fl 发表于 2011-9-4 09:56 | 显示全部楼层 |阅读模式
    最近在做CMDB的数据库设计方案,有4种方案,各有利弊,我选方案3,大家可以讨论下,或者有什么更好的方案,请指教!
   

术语英文全称说明
配置管理数据库(CMDB)Configuration Management Database它是一种包含每一个配置项全部关联细节以及配置项之间重要关联细节的数据库
配置项(CI)Configuration Item配置项信息覆盖了企业网络中的应用、操作系统、补丁、硬件设备、生命周期成本以及用户链接
配置项分类Configuration item category配置项所属分类,如数据库,主机
   


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


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

6d05802c-2da4-335d-b573-e64ba5734234.jpg




方案说明:
CMDB由三个实体组成,即配置项,配置项分类,配置项属性定义。
每增加一个配置项属性,会动态的在配置项表里增加一个扩展字段,扩展字段以EP作为前缀。
没删除一个配置项属性,会动态的在配置项表里删除这个扩展字段。
所有扩展字段必须可空。
方案优点:
灵活,且方便查询。
方案缺点:
1:需要建立表分区:当配置项达到上千万的数据的时候,为了提高性能,必须在配置项表的配置类型字段上建立表分区,而不是所有的数据库都支持表分区。但当数据量在百万左右的时候,可以通过建立索引来挺高查询性能。
2:配置项表扩展字段太多:因为每增加一个配置项属性,就会在配置项表增加一个可空字段,所以配置项表的字段会非常多,预计最多在1000左右。所有的数据库对单列的长度都有限制,如MySql单列字段长度为65535。




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

方案说明:
CMDB由三个实体组成,即配置项,配置项分类,配置项属性定义。表结构类似方案1。
为每一个配置项分类(叶子分类)建立一张表。如为数据库,路由器,防火墙单独建立一张表
方案优点:
性能高:数据按照配置项分类存在不同的表里插入和查询效率高。
方案缺点:
1.         需要创建的表非常多。如果管理粒度非常细,需要创建几百张表。如到windows操作系统,锐捷路由器这一层。当配置项的数据达到千万级的时候,有的配置项表也会达到百万级。
2.         需要动态创建表,随着管理粒度的细化,需要动态创建表。如项目一期的分类为三层,即硬件-设备-路由器,然后到项目三期的时候分类变为四层,即硬件-设备-路由器-Ruijie路由器(cisico,juniper,huawei)



3:方案三:固定冗余字段数据库设计
89fc1b52-46ab-3951-84bf-56dc6abd86be.jpg

方案说明:
CMDB由三个实体组成,即配置项,配置项分类,配置项属性定义。
在配置项表里增加200个固定的冗余字段,并在”配置项类型和属性关系表”里增加一个字段,建立属性和扩展字段之间的关系,据实际情况表明一个配置项分类的扩展属性不会大于200。
冗余字段里以FS作为前缀的字段表示字符串型,FN表示数字型,FD表示日期型。
冗余字段的分配比率为FS>FN>FD 5:4:1。
相对于全部使用字符串存储的优势在于整个表的体积会缩小。缺点在于分配时比较麻烦,有可能出现某个类型不够的情况,如date类型不够用就得用String字段。
冗余字段的长度:原则为定义为各个数据库能够容纳的最大值,将FS定义为varchar2000 ( 各数据库最大长度为 SQLserver的varchar  8000,mysql的 varchar  65535,Oracle的varchar最大2000,varchar2最大是4000)。
在存储上不会受影响,因为varchar是可变长存储的。查询和插入上的效率取决于存储数据的大小。
各控件的数据存储:
文本框是数字型的存在FI里。
文本框(input),复选框(checkbox),单选框(radio),下拉框(select),文本域(textarea)全部存储在FS里。如果出现数据字典的键值对,直接存值,如1=上海,2=北京,3=福州,直接存上海,北京,福州。
日期控件(date),存在FD里。

删除某个属性时,需先删除属性和F_N的关系,再删除F_N列的数据,F_N列都是可空列。
方案优点:
方便查询。
且规避了方案一的配置项表扩展字段太多的缺点。
方案缺点:
没有方案一灵活




4:方案四:固定表和字段数据库设计
8a8ecf25-2de6-3183-bca9-73f9960c019d.jpg


方案说明:
CMDB由两个个实体组成,即配置项(含配置项分类),配置项属性定义。
配置项属性的值存在“配置项类型和属性关系表”里。
方案优点:
简化了设计。
配置项也可以动态增加扩展属性。
方案缺点:
1.         配置项和配置分类放在一张表里,频繁的查询配置项分类存在性能问题。建立索引能够解决性能问题,但是配置项的表是千万级数据量,在多个字段处建立索引,会导致索引文件非常大,并且影响数据查询性能。
2.         使用列存储配置的属性和值,当出现统计查询的时候,查询语句非常难写。


yoyo 发表于 2011-9-4 09:57 | 显示全部楼层
有其他方案的同学,请阐述方案的优缺点。谢谢

话说我当年 发表于 2011-9-4 09:57 | 显示全部楼层
这种方案不值一看.CMDB就是用Nosql.动态字段一切搞定

郁闷小男人 发表于 2011-9-4 09:57 | 显示全部楼层
luonianqing 写道
这种方案不值一看.CMDB就是用Nosql.动态字段一切搞定

嗯,Nosql是一种思路,详细方案没研究过。

fossil 发表于 2011-9-4 09:57 | 显示全部楼层
我做的用的方案1,配置项表、配置项属性值表、模板表、属性表、模板属性关系表
不过由于列属性变为了行存储,在多条件搜索的时候效率会很低。
后来用了mongodb做了个方案备选,一切烦恼都没了。。。。世界一片干净。

话说我当年 发表于 2011-9-4 09:57 | 显示全部楼层
对于cmdb这种应用,mongodb必须加入version控制和额外的一致性实现
cmdb用关系型还是最方便快捷,这点数据量还不至于要nosql才能解决
灵活性可以靠自己实现类似rdbms的方式管理列的元数据,如果列转行百万的对象都难支撑
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-30 21:37 , Processed in 0.143185 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表