图数据库GDMBASE快速入门及实战

539 阅读20分钟

介绍

蜀天梦图数据库(GDMBASE)是达梦数据下属子公司四川蜀天梦图数据科技有限公司坚持通过自主研发、原始创新,以图数据标准模型、图存储、图查询、图计算为核心的一款分布式图数据库管理系统基础软件产品。

为了使用户快速上手使用蜀天梦图数据库管理系统V3(以下简称GDMBASE),不同于详细的用户手册,本文从实战的角度出发,从部署(单机、分布式)、数据导入、使用图、备份与还原等4个方面整体介绍如何使用GDMBASE,使用户更加容易理解及上手,节约初步接触和学习图数据库时的时间和成本。

环境准备

在安装GDMBASE之前,请先检查所得到的产品是否完整,并准备好GDMBASE所需的硬件环境、软件环境。

当前GDMBASE V3存储产品采用数据分片存储方式,图库之间为物理隔离,创建图时可指定图的分片(segment)以及图的副本数(replica),根据产品特性,单个数据分片存储点、边数据总量在10亿内为宜,同时尽量为单个数据分片预留4G可用内存空间。

使用者应结合GDMBASE的产品规格和自身应用需求来选择合适的硬件配置,如CPU的指标、内存及磁盘容量等。基于Java的程序运行时最好有充足的内存空间,同时应配置足够的磁盘空间以存储不断增长的业务数据,硬件配置建议应尽可能高一些,特别是作为数据库的服务器。其它设备如UPS(Uninterruptible Power System,不间断电源)等在重要应用中也建议考虑。

硬件基础环境

名称要求
CPU16核及其以上
内存32G及其以上
硬盘500G及其以上;轻量级100G即可优先考虑SSD/SATA
网络由于GDMBASE是基于客户端/服务器方式的大型图数据库管理系统,客户机与服务器可能分布在不同的服务器,因此网络环境要求在一个局域网中。部署在不同服务器的集群环境,建议带宽在千兆及以上。

软件基础环境

名称要求备注
glibc2.17 及以上执行命令ldd --version检查版本
gcc4.8.5及以上执行命令gcc --version检查版本
jdk1.8及以上执行命令java --version检查版本

系统资源推荐表

顶点(实体)数≤0.5亿0.5亿~2亿2亿~5亿5亿~10亿≥10亿
Gstore节点数1135≥5
CPU核数(每节点)16326472≥128
Gstore内存(每节点)32GB128GB128GB256GB≥256GB
Cypher-loader内存16GB64GB96GB128GB256GB
Segment(总数)14121620
磁盘空间(每节点)200GB500GB2TB5TB≥5TB

Gstore节点数:指GDMBASE的实际部署节点数,单机为1个gstore节点数,分布式3节点为3个gstore节点数,以此类推。

Cypher-loader: 此工具为GDMBASE进行大数据批量在线装载的组件,因此随着装载数据量的增大其所需要的内存也会随之升高,若有10亿以上的超大数据集建议用单独的机器作为装载机。

Segment:为创图的分段数,类似于关系库分片的概念,主要作用为了提高性能、实现可扩展性、保证集群的可用性和可靠性,以及便于集群的扩展。若已知图规模建议可提前进行Segment数配置与划分。

其他配置

在实际部署使用中,需要修改部分系统参数。

修改前的参数检查:

执行指令vi /etc/profile ,进入到文件,添加如下命令并保存。

ulimit -n 65535
ulimit -c unlimited

修改后执行指令source /etc/profile,重新加载配置参数,即刻生效。部分机器环境source命令无法生效,可通过重启服务器的方式生效。

修改后的参数检查

open files : 在大数据集装载时,充足的文件数确保文件打开/置换顺利进行,有效地保障装载流程的功能和速率。

设置GDMBASE License

GDMBASE需要License授权(安装路径/conf/gdmbase.key)才可以正常启动和使用图库,关于License的申请和获取,请向四川蜀天梦图数据科技有限公司销售人员咨询获取或访问公司官网www.gdmbase.com/申请获取。

部署

部署前准备

方式二:登录四川蜀天梦图数据科技有限公司产品官网,注册官网登录账号后根据实际需要填写试用申请信息,服务人员收到申请后会进行对应版本的协调,获取后提供。

实际下载的安装包版本可能会与本文截图中示例版本不一致,具体使用版本以官网下载GDMBASE版本为准。

  • 服务器端口检查 GDMBASE的存储-服务-客户端之间是通过IP&PORT建立连接及保持通讯,在部署前,须先确认服务器主机的IP地址,以及对应图库默认端口是否空闲(netstat命令检查)。若用户想自定义IP或PORT,须存储-服务-客户端对应配置文件中的通讯参数保持一致。 启动默认端口
服务名称端口
gcm/gstore8020、8000
cypher-server8100
web-console8200

单机

(1)部署架构图

  • Gstore:为GDMBASE最底层且最核心的存储组件,主要用于数据存储与数据副本,保障数据的高可用性和一致性,装载和查询的性能主要由其决定。
  • Cypher-server:其主要进行cypher语法解析、权限关联、二开驱动管理等工作,是外部与存储信息交互的枢纽。
  • Cypher-shell:别称console-shell,是连接cypher-server的命令行工具,主要进行cypher相关的语法指令下达。
  • Web-console:web访问的可视化页面工具,相较于console-shell使用更为方便,使用前需有jdk1.8及其以上环境。

(2)解压安装包 GDMBASE安装包为绿色版,解压即安装完毕。

需手动将gdmbase.key授权文件放入conf目录下。(达梦官网下载的试用包会自带试用授权无需手动操作)

(3)配置讲解 GDMBASE的配置文件在安装路径中的conf目录中。

  • gstore参数 部署存储后打开conf/gstore.ini文件,请优先检查以下配置的相关信息,其他参数可先使用默认值。
参数名备注
SYS_MODE=0#系统模式 1-分布式;0-单机
NODE_TYPE=1#节点类型: 1-数据节点; 2-管理节点,单机无需修改。
DATA_DIR=./data#数据存放路径
LOG_DIR=./log#日志存放路径
NODE_IP=127.0.0.1#当前节点的IP,单机时即存储节点的IP
MAL_PORT=8000#当前存储节点的内部通信端口,若无端口占用无需修改。
DATA_PORT=8020#当前存储节点的端口,与server或装载工具连接时的端口,若无端口占用无需修改。
  • cyphe-server参数
参数名备注
host = "0.0.0.0"#cypher服务本机ip,可不修改
port = 8100#cypher服务启动占用端口号
[gstore] host = "127.0.0.1"#连接存储ip地址
[gstore] port = 8020#连接存储DATA_PORT端口

(4)启动 GDMBASE的启动程序在安装路径中bin目录下,依次执行命令可启动各组件。一般地,为了使进程保持后台运行,可使用tmux插件或nohup指令运行各组件。

  • gstore

当存储成功启动并出现gstore is ready.后证明存储已准备就绪;如未出现以上成功标识,请仔细检查配置文件和主机防火墙状态,然后根据组件的报错信息进行排查分析。 后台启动示例(bin下执行):nohup ./gstore >/dev/null 2>&1 & 查看存储版本:

  • cypher-server

当组件成功启动并出现server is running bolt protocol后证明GDMBASE已准备就绪;如未出现以上成功标识,请仔细检查各组件配置文件和主机防火墙状态,然后根据组件的报错信息进行排查分析。 后台启动示例(bin下执行):nohup ./cypher-server >/dev/null 2>&1 & 查看cypher-server版本:

  • cypher-shell cypher-server服务正常启动后,可通过cypher-shell去连接创建图空间。 若cypher-server使用默认端口8100启动,可直接执行./cypher-shell,系统用户名/密码默认SYSDBA/SYSDBA。 若非默认端口需执行./cypher-shell -a bolt://ip:port -u username -p password,示例./cypher-shell -a bolt://127.0.0.1:8101 -u SYSDBA -p SYSDBA。

  • web-console 需在jdk1.8及以上环境下启动。此工具为可视化查询组件,若不需要可视化查询操作,也可不启动该组件服务。 后台启动示例(bin下执行):nohup ./console-server.sh >/dev/null 2>&1 &

访问地址:https://ip:port ;默认port为8200。

(5)关闭 关闭GDMBASE服务建议以自上而下的方式进行逐一关闭。

  • web-console web-console组件是以连接串的方式请求服务,因此若无特别关闭需求可以使用nohup长时间在后台挂起。关闭可以在启动窗口执行ctrl+c,后台挂起可通过查询服务端口8200对应pid(netstat -ntlp| grep 8200),执行kill pid 关闭。
  • cypher-shell cypher-shell为在线的命令行操作组件,退出可直接在窗口执行:exit

  • cypher-server cypher-server组件关闭可以在启动窗口执行ctrl+c,后台挂起可通过netstat 查询服务端口8100对应pid,执行kill pid 关闭。
  • gstore 为了降低数据文件被破坏的风险性,在退出存储时,推荐在gstore控制台使用ctrl+c或使用kill -2退出指定gstore进程pid(可通过netstat 查询服务端口8020对应pid)。

分布式

本文介绍的分布式部署将使用4台虚机进行1gcm+3gstore的部署模式。若需要高可用架构部署,可部署3gcm+3gstore模式。在达梦官网下载的GDMBASE版本授权仅为单机,若需要分布式部署请咨询四川蜀天梦图数据科技有限公司销售人员。

(1)部署架构图

GDMBASE GSTORE是分布式原生图存储引擎。 GDMBASE采用存算分离的架构,存储层主要包含数据分区(gstore)、管理分区(gcm)和驱动,其中数据分区(gstore)用于存储数据内容和数据副本;管理分区(gcm)起到管理分布式集群节点的通信、状态管理和元数据管理;驱动则是上层服务访问数据的入口。 原生图存储支持以图模型存储数据,邻接查询时不需要索引,查询更为高效;分布式集群存储,将数据分布到不同的节点存储(gstore),具有高扩展性,增加存储节点便可以有效地提升系统的存储容量。同时GDMBASE支持数据加密、副本容灾、数据压缩等存储技术。

(2)配置讲解 当前四台主机IP地址分别为:192.168.0.1、192.168.0.2、192.168.0.3、192.168.0.4,4节点(1gcm+3gstore)可以自由分配到4台主机上。

名称IP
Gcm192.168.0.1
Gstore0192.168.0.2
Gstore1192.168.0.3
Gstore2192.168.0.4
  • gcm参数 部署存储后打开conf/gstore.ini文件,请优先检查以下配置的相关信息,其他参数可先使用默认值。
参数名备注
SYS_MODE=1#系统模式 1-分布式;0-单机
NODE_TYPE=2#节点类型: 0-计算节点;1-数据节点; 2-管理节点
MNODE_NUM=1#管理节点数目
MNODE_CFG=0 192.168.0.1 8000 8020#管理节点序号,ip信息,MAL端口,DATA端口;
MNODE_ID=0#当前管理节点的序号,从0开始。
MAL_PORT=8000#当前存储节点的内部通信端口
DATA_PORT=8020#当前存储节点的端口,与server或装载工具连接时的端口
  • 0号gstore数据节点
参数名备注
SYS_MODE=1#系统模式 1-分布式;0-单机
NODE_TYPE=1#节点类型: 0-计算节点;1-数据节点; 2-管理节点
MNODE_NUM=1#管理节点数目
MNODE_CFG=0 192.168.0.1 8000 8020#管理节点序号,ip信息,MAL端口,DATA端口;
MNODE_ID=0#当前管理节点的序号,从0开始。
NODE_IP=192.168.0.2#当前存储节点的IP
MAL_PORT=8000#当前存储节点的内部通信端口
DATA_PORT=8020#当前存储节点的端口,与server或装载工具连接时的端口
  • 1号gstore数据节点
参数名备注
SYS_MODE=1#系统模式 1-分布式;0-单机
NODE_TYPE=1#节点类型: 0-计算节点;1-数据节点; 2-管理节点
MNODE_NUM=1#管理节点数目
MNODE_CFG=0 192.168.0.1 8000 8020#管理节点序号,ip信息,MAL端口,DATA端口;
MNODE_ID=0#当前管理节点的序号,从0开始。
NODE_IP=192.168.0.3#当前存储节点的IP
MAL_PORT=8000#当前存储节点的内部通信端口
DATA_PORT=8020#当前存储节点的端口,与server或装载工具连接时的端口
  • 2号gstore数据节点
参数名备注
SYS_MODE=1#系统模式 1-分布式;0-单机
NODE_TYPE=1#节点类型: 0-计算节点;1-数据节点; 2-管理节点
MNODE_NUM=1#管理节点数目
MNODE_CFG=0 192.168.0.1 8000 8020#管理节点序号,ip信息,MAL端口,DATA端口;
MNODE_ID=0#当前管理节点的序号,从0开始。
NODE_IP=192.168.0.4#当前存储节点的IP
MAL_PORT=8000#当前存储节点的内部通信端口
DATA_PORT=8020#当前存储节点的端口,与server或装载工具连接时的端口
  • cyphe-server参数
参数名备注
host = "0.0.0.0"#cypher服务本机ip
port = 8100#cypher服务启动占用端口号
[gstore] host = "192.168.0.1"#连接集群中0号gcm管理节点的IP
[gstore] port = 8020#连接集群中0号gcm管理节点DATA_PORT端口

(3)解压安装包 GDMBASE安装包为绿色版,解压即安装完毕。

(4)启动 首先启动gcm节点,gcm节点成功启动后,既而将所有gstore节点逐一启动,待全部gstore均连接上gcm且服务均ready后,在使用cypher-server进行连接。

  • gcm 在线启动,bin下,执行./gcm 后台挂起,bin下执行nohup ./gcm >/dev/null 2>&1 & 当存储成功启动并出现gcm is ready.后证明存储已准备就绪;如未出现以上成功标识,请仔细检查配置文件和主机防火墙状态,然后根据组件的报错信息进行排查分析。
  • gstore 在线启动,bin下,执行./gstore 后台挂起,bin下执行nohup ./gstore >/dev/null 2>&1 & 当存储成功启动并出现gstore is ready.后证明存储已准备就绪;如未出现以上成功标识,请仔细检查配置文件和主机防火墙状态,然后根据组件的报错信息进行排查分析。
  • 校验集群启动成功状态 使用bin下的gstore-diagnose工具。

说明: id : 节点id,id为3以下的为gcm节点(当前最多只支持3个节点);id大于等于10的为gstore节点(存储/数据节点)。 port : 数据端口,数据传输同步的端口。 mal_port : 通信端口,集群内部各个节点间交互的端口。 role : gcm在同步关系中的角色,1表示为主节点,2表示为从节点(多gcm部署中使用)。 status:加入集群是否成功状态码。1:成功;0:失败。 注:此工具的详细用法在GDMBASE手册的高可用章节有介绍如何分析返回结果日志。

  • cypher-server 在线启动,bin下,执行./cypher-server 后台挂起,bin下执行nohup ./ cypher-server >/dev/null 2>&1 & 当组件成功启动并出现server is running bolt protocol后证明GDMBASE已准备就绪;如未出现以上成功标识,请仔细检查各组件配置文件和主机防火墙状态,然后根据组件的报错信息进行排查分析。
  • cypher-shell/web-console 启动方式与本文在单机模式下讲解的启动方式保持一致。

(4)关闭 GDMBASE集群的关闭建议自上而下的关闭,除上层客户端工具外,优先关闭cypher-server服务;既而逐一关闭全部gstore节点服务,若为在线启动,则在gstore控制台使用ctrl+c,若后台挂起启动,则使用kill -2退出指定gstore进程pid(可通过netstat 查询服务端口8020对应pid);最后关闭gcm节点,与关闭gstore节点方式一致。

数据导入

GDMBASE导入数据的方式有三种:cypher-loader、cypher-import和loadCsv。 loadCsv是一个强大的数据在线装载工具,可以将 CSV 文件中的数据加载到 GDMBase 图数据库中。它能够自动化将一个 CSV 文件中的每一行作为一个节点或者一个关系加载到数据库中,并且可以根据需要将 CSV 文件中不同的列转化为节点的属性或者关系的属性。 cypher-loader、cypher-import可实现将纯文本文件数据以全量/增量的方式导入到图库。 本章节主要讲解使用GDMBASE安装包中自带的测试示例数据(import目录)使用cypher-import工具进行装载,详细的复杂数据情况的配置请查阅手册,根据实际使用情况进行调整配置。 Cypher-Import快速装载工具使用指定格式的表头描述数据字段,表头具有两种编写模式: 模式一:是将表头写在CSV文本文件开头。 模式二:是将表头信息单独使用一个文件进行保存,使用--headers参数指定表头文件路径。 在使用表头时,有以下注意事项:

  • 当使用单独文件保存表头信息时,该文件与CSV数据文件的分隔符要保持一致。
  • 当CSV文件的首行存在任意表头或不是有效数据行时,都需要使用--skip--headers参数跳过该行。
  • 如果CSV文件的首行为不适配的表头信息,可在单独表头文件中编写该文件对应的表头信息,装载工具会优先使用单独表头文件中的信息作为表头信息来进行数据解析。
  • 编写关系文件表头时,请将:TYPE字段置于末尾,避免对属性列的映射产生影响。

以安装/import 目录下的测试数据为例进行测试数据装载。装载工具是直接连接存储装载接口进行快速装载,集群模式连接gcm节点的ip与服务端口。

bin下执行:

./cypher-import --host=127.0.0.1 --port=8020 --database=Example --datasets=./../import/Example/1

使用cypher-shell工具检查数据是否已经装载成功。

注:GDMBASE数据(点、边)使用rowid作为唯一id,rowid是系统自动生成即用户无法修改,且rowid仅能用于点、边的查询。那么用户需要赋予点、边实际含义的业务id怎么办呢?为了解决这个问题,GDMBASE引入PK主键(string类型),可将业务id赋值于pk主键中,GDMBASE就可以使用业务Id进行快速的查询。因此大家可以看到使用cypher-import装载的样例数据文件中的表头文件以及cypher-loader.yaml文件中均使用PK来进行标注。

还有一点需要特别注意,全量装载需要用户进行PK去重,装载工具不会进行去重校验,若数据未清洗干净引入了重复数据可能会引发不可预知的问题。增量装载则无需关心这个问题,系统会按照装载配置对重复的数据进行覆盖、忽略、报错等操作。

使用图

客户端工具

在上述已装载的测试数据上进行一些基础查询。

启动cypher-shell 执行命令,启动方式详见上文图库单机/分布式启动章节。

  • 数据库连接状态

  • 切换图,查询点边数据量

  • 查询点、边schema

  • 查询点、边标签

  • 查询每个点、边标签对应的数据量

接下来我们使用cypher语句进行图空间创建及一些三国人物间关系的数据添加。

  • 创建threeCountries图库。

  • 执行下列语句进行数据创建
CREATE (caoCao:Person {name: "曹操", country: "魏"}),
(liuBei:Person {name: "刘备", country: "蜀"}),
(sunQuan:Person {name: "孙权", country: "吴"}),
(guanYu:Person {name: "关羽", country: "蜀"}),
(zhangFei:Person {name: "张飞", country: "蜀"}),
(zhaoYun:Person {name: "赵云", country: "蜀"}),
(zhouYu:Person {name: "周瑜", country: "吴"}),
(lvBu:Person {name: "吕布", country: "无"}),
(diaoChan:Person {name: "貂蝉", country: "无"}),
(zhangLiao:Person {name: "张辽", country: "魏"}),
(xunYu:Person {name: "荀彧", country: "魏"}),
(zhugeLiang:Person {name: "诸葛亮", country: "蜀"}),
(guoJia:Person {name: "郭嘉", country: "魏"}),
(maChao:Person {name: "马超", country: "蜀"}),
(huangZhong:Person {name: "黄忠", country: "蜀"}),
(sunShangXiang:Person {name: "孙尚香", country: "吴"}),
(dianWei:Person {name: "典韦", country: "魏"}),
(luSu:Person {name: "鲁肃", country: "吴"}),
(luXun:Person {name: "陆逊", country: "吴"}),
(caoCao)-[:对手]->(lvBu),
(caoCao)-[:下属]->(dianWei),
(caoCao)-[:对手]->(liuBei),
(caoCao)-[:对手]->(sunQuan),
(caoCao)-[:下属]->(zhangLiao),
(caoCao)-[:下属]->(xunYu),
(caoCao)-[:下属]->(guoJia),
(liuBei)-[:夫妻]->(sunShangXiang),
(liuBei)-[:兄弟]->(guanYu),
(liuBei)-[:兄弟]->(zhangFei),
(liuBei)-[:下属]->(maChao),
(liuBei)-[:下属]->(huangZhong),
(liuBei)-[:下属]->(zhugeLiang),
(liuBei)-[:盟友]->(sunQuan),
(sunQuan)-[:下属]->(zhouYu),
(sunQuan)-[:下属]->(luSu),
(sunQuan)-[:下属]->(luXun),
(sunQuan)-[:兄妹]->(sunShangXiang),
(lvBu)-[:夫妻]->(diaoChan),
(liuBei)-[:下属]->(zhaoYun);

  • 查询返回距曹操 1-2 跳的所有关系的姓名
MATCH (n:Person  { name: '曹操' })-[*..2]-(m:Person)  RETURN m.name;

  • 查询返回距曹操 1-2 跳的所有关系,国家是吴国的姓名。
#两种写法
MATCH (n:Person  { name: '曹操' })-[*..2]-(m:Person{ country : '吴' })RETURN m.name;
MATCH (n:Person  { name: '曹操' })-[*..2]-(m:Person) WHERE m.country='吴'RETURN m.name;

  • 找到曹操和貂蝉间不超过7跳的最短路径
match (n {name:"曹操"}), (m {name:"貂蝉"}), p = shortestPath((n)-[*..7]-(m))RETURN p;

  • 找到曹操和貂蝉间不超过7跳的最短路径,路径中的标签不包含“夫妻”类型。
match (n {name:"曹操"}), (m {name:"貂蝉"}), p = shortestPath((n)-[*..7]-(m))
WHERE none (r IN relationships(p) 
WHERE type(r)= '夫妻')
RETURN p;

  • 曹操和赵云两点之间的所有最短路径。
match (n {name:"曹操"}), (m {name:"赵云"}), p = allShortestPaths((n)-[*]-(m))RETURN p;

Web访问工具

对上述已经创建的三国图谱,使用web-console组件进行查询。

  • 查询全部点数据

  • 曹操和赵云两点之间的所有最短路径。

  • 查询三国中全部人物及其之间的人物关系。

上述在命令行中增删改查的语句均可在web-console中可视化展示。

备份与还原

关于GDMBASE的备份与还原,有专门的章节介绍,详见文章GDMBASE备份还原

总结

通过上述内容的学习和实践,相信大家对GDMBASE 图数据库有了初步的理解以及能够做到基本的使用。图数据库以其独特的图数据结构,在处理复杂关系数据时展现出显著的优势,希望这篇文章能够为那些正在探索图数据库技术的同行们提供有价值的参考,并激发大家进一步深入学习的兴趣。对于刚开始接触图数据库的朋友们,建议从简单的应用场景入手,逐步了解和熟悉图数据库的特性和优势,通过实践中的不断尝试,由易到难、由简到繁,逐步探索和发掘图数据库的无限潜力。相信随着经验的积累,我们将能够灵活地运用图数据库应用在实际的工作当中。

GDMBASE - 分布式原生图数据库