前几天和同事讨论了一下CMDB系统的资产台账部分的功能,设计了几个mysql表准备开始开发。但是我始终不是特别喜欢Mysql这种关系型数据库,一方面是觉得太重了(因为公司使用mybatis,还要写xml,mapper等),另一方面是我觉得这种资产之间关系在关系型数据库里表达得不是那么直观。是否有和现实简单映射的直观存储方式呢?想起之前面试的时候有人和我说起过图数据库,也就去稍微研究了下图数据库neo4j。
稍微研究并试验了一下图数据库,是真的直观且有趣啊。就决定自己玩一下,建立一个简单的资产管理系统。
趁着五一有点小时间,梳理了一下需求,今天先做一个简单的数据库设计,目前收集到的需求不全,所以肯定有一些疏漏,只能后续陆续补充了。
需求梳理
- 需要记录每个服务器的IP信息,目前考虑以虚拟机为主
- 记录每台服务器上安装部署的软件信息(操作系统、数据库、中间件),包括版本、用户名和密码,如果是采购的,需要记录供应商和合同到期时间
- 记录服务器和项目的从属关系,可以查询出服务器所属的项目、维护人员、申请人员、部门等
- 记录服务器的部署地点(多云环境)
- 记录火墙信息(ip,端口,到期时间,协议)
- 无需记录ESX或网络路由器等信息,直接从虚拟机层面开始即可
结构设计
![](https://img.haomeiwen.com/i3320837/02659007acde0820.png)
下表列出所有实体的含义,忽略neo4j自带的id属性
实体 | 属性 | 说明 |
---|---|---|
Person | name, sso_id | 记录人员的姓名和认证ID |
Department | name | 记录部门的信息 |
Project | name | 项目名称 |
Application | name | 应用名称,一个项目可能包含多个应用 |
Server | in_ip, out_ip, cpu, mem, disk | 服务器信息 |
Env | name | 部署地 |
Component | name, version | 技术组件信息 |
Supplier | name | 记录第三方供应商信息,如果是开源则标记license |
下表列出所有关系:
关系名称 | 关系头 | 关系尾 | 属性 | 说明 |
---|---|---|---|---|
MEMBER_OF | Person | Department | role | 人是部门的一员,role标记部门经理 |
WORK_IN | Person | Project | role | 人作为项目经理/开发等角色在项目中干活 |
INTRODUCE | Person | Component | date | 人何时引入技术组件 |
APPLY | Person | Server | date | 人何时申请了服务器 |
MANAGED_BY | Server | Person | username, password | 服务器由哪个人运维,如何登陆 |
SUPPLIES | Supplier | Component | type, contract_start, contract_end | 供应商如何提供服务,合同时间 |
CONTAINS_APP | Project | Application | 应用和项目的从属 | |
RUN_IN | Application | Server | purpose, usage, module | 应用使用服务器具体用途 |
INSTALLED_IN | Component | Server | path, username, password, cluster_type, cluster_role | 在服务器上,技术组件是如何部署的 |
DEPLOY_IN | Server | Env | 服务器部署在哪个云环境上 | |
FIREWALL | Server | Server | from_ip, to_ip, port, protocol | 服务器之间的火墙信息 |
设计完表结构以后,下一步先找点数据建立一个简单的模型,然后把java跑通,有以下功能需要验证:
- 节点数据的增删改查
- 关系的增删改查
网友评论