Laboratory

1.设计数据库结构 | 基于图数据库的资产管理

2020-05-05  本文已影响0人  MisterCH

前几天和同事讨论了一下CMDB系统的资产台账部分的功能,设计了几个mysql表准备开始开发。但是我始终不是特别喜欢Mysql这种关系型数据库,一方面是觉得太重了(因为公司使用mybatis,还要写xml,mapper等),另一方面是我觉得这种资产之间关系在关系型数据库里表达得不是那么直观。是否有和现实简单映射的直观存储方式呢?想起之前面试的时候有人和我说起过图数据库,也就去稍微研究了下图数据库neo4j。

稍微研究并试验了一下图数据库,是真的直观且有趣啊。就决定自己玩一下,建立一个简单的资产管理系统。

趁着五一有点小时间,梳理了一下需求,今天先做一个简单的数据库设计,目前收集到的需求不全,所以肯定有一些疏漏,只能后续陆续补充了。

需求梳理

  1. 需要记录每个服务器的IP信息,目前考虑以虚拟机为主
  2. 记录每台服务器上安装部署的软件信息(操作系统、数据库、中间件),包括版本、用户名和密码,如果是采购的,需要记录供应商和合同到期时间
  3. 记录服务器和项目的从属关系,可以查询出服务器所属的项目、维护人员、申请人员、部门等
  4. 记录服务器的部署地点(多云环境)
  5. 记录火墙信息(ip,端口,到期时间,协议)
  6. 无需记录ESX或网络路由器等信息,直接从虚拟机层面开始即可

结构设计

图数据库关系结构

下表列出所有实体的含义,忽略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跑通,有以下功能需要验证:

  1. 节点数据的增删改查
  2. 关系的增删改查
上一篇 下一篇

猜你喜欢

热点阅读