教程|利用 TuGraph 图数据库搭建图应用
导读: 今天分享的主题是如何使用 TuGraph 图数据库搭建图应用,希望帮助大家快速上手 TuGraph 的使用,并搭建一个满足自己需求的图应用产品。
今天的介绍会围绕下面六点展开:
-
场景和应用
-
准备和部署
-
模型设计和数据导入
-
开发和调试
-
运维和监控
-
应用和连接
分享嘉宾|历鹏飞 蚂蚁集团 产品经理
编辑整理|王吉东 昆仑数据
出品社区|DataFun
01/场景和应用
1. 场景和应用
对于一款产品而言,什么是场景,什么是应用,这是困扰了很多产品经理的一个值得深思的问题。
场景无处不在。如果为"场景"二字下一个定义,通常是指需求产生的某种环境或条件背景;而需求的定义,通常指因人们的需要而产生的特定的要求;又因为需求的产生,进一步就需要满足用户的需求,为用户提供服务,于是产生了应用。场景、需求、应用,这三者息息相关。下面以几个和生活中常见的场景为例:
① 网上购物场景,常常涉及金融领域,因此需要考虑到欺诈场景。因此,预防欺诈和反欺诈成为用户的需求;进而,相关防控欺诈的应用应运而生。
② 公安场景,主要涉及的需求就是如何预防案情触发,让社会治安更加稳定。
③ 过去的三年里,在疫情环境的影响下,快速地产生了行程码和健康码两个应用。
不同场景会产生不同的需求,进而产生相关的应用为人们服务。
2. 数据库的选择
一般来讲,如果使用场景所涉及到的数据关系简单,表格清晰,用户不关注数据的关系价值,则建议使用关系型数据库;相反,如果关系复杂,且用户需要通过关系来发现数据价值,则建议使用图数据库。
以课程表为例,如果仅仅体现课程排班情况,则使用最基本的二维表格即可实现;但如果要增加学生爱好统计、教师擅长科目信息、教师时间安排日程表、城市教学质量反馈表等诸多维度的信息,并将上述信息进行整合和综合分析,来做一个综合因材施教的应用,那么图数据库就变得非常必要。
在图数据库产生之前,我们使用关系型数据库,通过关联表、字典表等方式进行链表操作,也可以实现相似的功能;然而在数据量庞大、关系节点深入的情况下,关系型数据库无论从功能还是性能上都会遇到其瓶颈,因此有必要引入图数据库。
所以,选择关系型数据库还是图数据库,通常由使用场景、需求以及应用所满足的条件所决定。
3. TuGraph 内置场景
目前版本的 TuGraph 图数据库已内置两个模拟场景,数据来自公开数据集:Movie 场景和 COVID-19 场景;后续将会扩充更多的内置场景(如金融场景、安全场景、医疗场景等)。
**① Movie 场景:**描述电影类型、电影题目、参演演员、观众评分等模型。
**② COVID-19 场景:**主要描述新冠疫情期间,患者的行动轨迹,以及与其接触的其他人员轨迹。
--
02/准备和部署
1. 部署方式
TuGraph 支持 Docker 镜像、CentOS、Ubuntu 三种环境的部署,支持跨平台部署,支持国产 CPU 架构、x86 架构以及 ARM 架构。
2. Docker镜像部署
(1)环境准备
本地安装 Docker 环境,并查看版本。
(2)镜像拉取
① 从 dockhub 上拉取 Docker 镜像,执行 docker pull 操作并指定地址,即可实现镜像的拉取(约需要 1 分钟左右);
② 镜像的拉取的同时,需要准备好本地 image,以便实现图数据库的可视化。
(3)服务启动
启动 TuGraph 服务,并将电脑外部端口和容器端口进行映射;
至此,准备工作和安装部署工作已完成。
--
03/模型设计和数据导入
客户的模型需求往往不尽相同,而内置场景不一定能顾全用户的多样化需求。以内置COVID 场景图模型为例,如果需要增加医生类型,或者增加医生擅长专业类型,该如何实现?这里就涉及到了模型设计和数据导入这两个概念。
1. 模型设计
① 在 TuGraph browser 这样的可视化操作工具中,可以在建模模块中直观地看到图模型(以内置 COVID 场景图模型为例);
② 点击"添加顶点标签"按钮,将会弹出如下的表单;在该表单中按照实际需求手动添加对应的点边类型;
③ 在图中点击对应的节点,可查看相应的点边类型详情,同时支持点边类型的删除。
2. 数据导入
完成模型的构建后,下一步工作就是数据的导入,可通过 TuGraph brower 模块实现。该模块既支持在线可视化导入,又支持后台导入。
相对于在线可视化导入,后台导入具有更高的效率和更大的吞吐量;因此,如果数据量较大,或者需要打通其他数据库,建议使用 TuGraph importer 工具进行后台导入;而可视化导入目前仅支持 2G 以内的数据,通常用于对于小数据样本进行较为基础的分析,以及 demo 尝试、功能演示等。
数据导入的步骤如下:
(1)选择数据和映射
选择本地数据文件,选择匹配的类型,并进行属性和数据的映射。
(2)完成数据导入
① 完成数据映射后,可以进行数据导入;
② 待数据导入成功后,可以看到导入成功的提示;如果导入失败,也可以显示失败的原因。
--
04/开发调试
开发调试对于开发侧人员而言是不可或缺的一环。对于一款应用的开发,数据清洗、接口调试等都是必需环节。因此,TuGraph 提供了一个开发调试页面,可实现数据的增删改查功能。该模块目前支持 Cypher 查询语言,后续会支持 ISO GQL;同时,支持用户在前端页面直接进行交互式操作,即通过鼠标选择和点击图中的点或线来直接实现数据的增删改查等功能,使操作更加直观和便捷。
--
05/运维和监控
1. 运维监控与告警
TuGraph 为用户提供了运维监控功能,通过实时状态监控页面,实现对五大指标进行状态监控,包括磁盘使用率、CPU 使用率、内存使用率、QPS 访问吞吐量、磁盘 IO 效率等。
**① CPU:**显示 CPU 的实时使用率,最大使用率,平均使用率等信息;
**② 内存:**显示图数据库使用内存、可用内存等信息;
**③ 硬盘:**显示图数据库占用硬盘情况、硬盘可用空间等信息;
**④ QPS:**显示每秒的读写请求数量;
**⑤ IO:**显示磁盘 IO 的实时速率。
此外,该模块还支持告警功能;用户可对每一指标配置相应告警阈值,如果监测到该指标超过阈值,则会发出相应的告警。
2. 外部模块集成
运维监控模块,还可对接普罗米修斯、Grafana 等开源监控平台,可实现即插即用,便捷高效。同时,通过 Grafana 可以链接到钉钉等通讯平台,可以实现告警消息推送,实现告警-通知这样的闭环。
--
06/应用和连接
1. 应用-服务-数据库
完成了模型的设计和数据的导入,如何将应用与数据库进行连接呢?通常的做法,可基于对应的业务逻辑,通过开发一项服务作为连接应用端与数据库端的枢纽,进而实现应用端与数据库端的连接。
2. 应用-数据库直连
TuGraphDB 内部提供 RESTful API 接口,支持用户使用 Cypher 和存储过程等方式实现一些基础的业务查询功能,并通过 RESTful API 与前端应用进行调用和交互;这样可以省掉服务的开发,实现数据库与应用的直连,使得整个系统更加简单便捷。
此外,对于较复杂的业务逻辑查询,可通过"存储过程"来实现;将复杂的逻辑语句集成到存储过程中,通过应用调用存储过程(TuGraphDB 目前支持 python、C++ 这两种接口),进而实现数据库与应用之间的交互操作。
3. 两种方式对比
传统的应用-服务-数据库的方式和应用-数据库直连的方式,各自的优缺点如下:
(1)传统的应用-服务-数据库的方式
① 灵活性更强;
② 可扩展性更强;
③ 数据安全更能得到保障。
(2)应用-数据库直连的方式
① 更加简便快捷;
② 业务查询效率更高;
③ 具备传输加密等安全措施。
因此,项目组可根据使用场景和开发团队情况做选择。
以上是今天分享的主要内容,用户可通过阿里云的 TuGraph 进行免费体验,网址为:http://computenest.console.aliyun.com。
此外,用户可通过 dockerhub 浏览和查看 TuGraph 的 docker 版本。
链接:++http://hub.docker.com/r/tugraph/tugraph-runtime-centos7/tags++
--
07/问答环节
Q1:存储过程操作,在功能或性能方面有什么独到之处?
A1:存储过程是为了更灵活地处理各种复杂的数据查询,在满足业务场景的前提下尽可能实现高效的查询。例如全图的扫描等操作,使用 Cypher 效率较低,如果使用存储过程来实现,则跳过了 Cypher 解析这一层,直接作用于底层数据库;进一步对数据库的 KV 层数据库进行优化,可以有效地提升效率。
Q2:TuGraph 是否支持版本历史变化的管理?
A2:TuGraph 目前是支持版本历史变化管理的,只是目前还不具备自动化升级或降级的功能。目前我们在 github 上有个链接,版本变更日志。不同的历史版本会有对应的 tag 加以区分,并用 change log 记录每个版本的功能提升介绍。
**今天的分享就到这里,谢谢大家。**
▌2023亚马逊云科技中国峰会
2023年6月27-28日9:00-17:00,2023亚马逊云科技中国峰会将在上海世博中心举办。
本次峰会将会分享数百个技术话题与最佳实践,覆盖汽车、制造、金融、医疗与生命科学、电商、游戏、泛娱乐、电信、教育、数字化营销等领域。
下面给大家预告一些精彩议题 报名参会,请点击"下方链接"。
2023亚马逊云科技中国峰会