1. 概述
1.1 方案介绍
手机淘宝购物时,手淘上有猜你喜欢页面来推荐你可能会感兴趣的商品;使用优酷观看电影时,页面上也会推荐你可能喜欢的电影列表。个性化推荐的应用非常广泛,帮助企业挖掘潜在的用户需求、提高转化率的同时,也能够有效提升用户体验度。个性化推荐基于用户的历史行为习惯,商品、电影本身的属性等数据集,这些数据之间相互关联,应用推荐策略时需要利用这些数据之间复杂的关联关系,因此使用图数据库来存储这些数据是非常合适的。
专有云敏捷版数据库场景DBStack是阿里云企业级交易、分析、传输、治理于一体的数据库管理平台,能够帮助企业构建稳定、安全、经济的全场景数据库解决方案,快速替换Oracle、DB2、Teradata等传统数据库与数据仓库。
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。
2. 方案架构
2.1 方案架构图
2.2 方案优势
DBStack是阿里云企业级交易、分析、传输、治理于一体的数据库管理平台,能够帮助企业构建稳定、安全、经济的全场景数据库解决方案,快速替换传统数据库与数据仓库。
标准图查询语言:支持属性图,高度兼容Gremlin和OpenCypher图查询语言。
高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。
服务高可用:支持高可用实例,节点故障自动切换,保障业务连续性。
易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 数据化描述。
2.3 产品/模块1介绍
专有云敏捷版数据库场景DBStack是阿里云企业级交易、分析、传输、治理于一体的数据库管理平台,能够帮助企业构建稳定、安全、经济的全场景数据库解决方案,快速替换Oracle、DB2、Teradata等传统数据库与数据仓库。
平台提供的产品包括AnalyticDB PostgreSQL、PolarDB O引擎、PolarDB-X等自研数据库,与MySQL、Redis等开源数据库,以及DTS、DMS、ADAM等生态工具。
2.4 产品/模块2介绍
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin和OpenCypher查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。例如,在一个典型的社交网络中,常常会存在“谁认识谁,上过什么学校,常住什么地方,喜欢什么餐馆之类的查询”,传统关系型数据库对于超过3度的查询十分低效难以胜任,但图数据库可轻松应对社交网络的各种复杂存储和查询场景。
2.5 产品/模块3介绍
数据管理(Data Management Service,简称DMS)是一种高效、安全、全面的数据库开发工作环境,提供多种数据库类型、多种环境统一的Web数据库管理终端;可以为企业用户快速复制搭建与阿里集团同等安全、高效、规范的数据库DevOps研发流程解决方案。
3. 方案实施
3.1 前提条件
已部署了DBStack数据库管理平台。
DBStack上部署了GDB产品。
已经有普通用户角色的账号。
3.2 操作步骤
步骤一:快速使用GDB的基本操作包括创建GDB实例、创建账号、连接实例
创建实例,实例是虚拟化的图数据库服务器,一个服务器中只能存储一个图,GDB目前不支持同一个服务器中创建多个图。
登录DBStack控制台。
在页面左侧导航栏,点击 GraphDB。
在右侧页面,单击创建GDB实例。
设置如下参数。
-
配置
说明
地域
实例所属地域
可用区
实例所属的可用区
实例分组
实例所属的资源集分组
内核版本
GDB 支持的内核版本为Gremlin、Cypher、Automl
系列
GDB 支持的系列为Gremlin、Cypher支持高可用版,Automl 支持基础版
存储类型
GDB 支持的数据库存储类型为本地SSD 盘
实例规格
实例的规格,不同的规格大小对应不同的核数和内存存储空间,具体请以控制台界面为准。
存储容量
选择实例的存储空间大小
完成参数配置后,单击确定。
创建账号,在使用图数据库之前,您需要在GDB实例中创建账号。
在页面左侧导航栏,点击 GraphDB。
在右侧页面,单击目标实例ID,打开实例的基本信息页面。
在左侧导航栏中,单击账号管理。
单击创建账号。
设置以下参数。
-
参数
说明
数据库账号
填写账号名称。要求如下:
长度为1~16个字符。
以字母开头,以字母或数字结尾。
由小写字母、数字或下划线组成。
密码
设置账号密码。要求如下:
长度为8~32个字符。
由大写字母、小写字母、数字、特殊字符中的任意三种组成。
特殊字符为:
!@#$%^&*()_+-=
。
确认密码
再次输入密码。
备注
非必填。备注该账号的相关信息,便于后续账号管理。最多支持256个字符。
单击确认。
连接实例,完成创建实例、创建账号等操作后,您可以使用Gremlin Console或者Cypher Shell连接到GDB实例。可以在DBStack控制台通过阿里云的数据管理服务DMS登录GDB数据库。
单击目标实例ID,打开实例的基本信息页面。
单击页面右上角的登录数据库。
填写数据库账号和数据库密码,点击确认。
4. 方案验证
4.1 验证一:使用图数据库的个性化推荐应用
1.建模
图数据库GDB目前支持的图模型是属性图,属性图将存储的基本元素分为点(Vertex)、边(Edge)和属性(Property),每个Vertex/Edge都有一个标签(Label)来代表它的类型。在书籍个性化推荐中,我们可以定义如下的基本元素:
Vertex:书籍(Book)、出版商(Publisher)、作者(Author)、读者(Reade)。
Edge:出版(Publish)、写作(Write)、打分(Score)。
Property:名字(name)、类型(type)、年龄(age)、出版年份(year)。
2.代码实现
现在我们要给用户名为“小明”的读者推荐书籍,直观想法是“找到哪些和小明评价过相同的书的读者,把他们评价过的其它书推荐给小明”。
图数据库GDB目前支持的查询语言是Gremlin,下面使用Gremlin语句来实现。
数据准备:
1.增加三本书籍的点:
g.addV('Book').property(id, 'gdb_sample_book1').property('name', '阿里巴巴Java开发手册').property('type', '计算机技术')
g.addV('Book').property(id, 'gdb_sample_book2').property('name', '追风筝的人').property('type', '小说')
g.addV('Book').property(id, 'gdb_sample_book3').property('name', '福尔摩斯探案全集').property('type', '小说')
2.增加两名读者的点:
g.addV('Reader').property(id, 'gdb_sample_reader1').property('name', '小明').property('age', 30)
g.addV('Reader').property(id, 'gdb_sample_reader2').property('name', '王五').property('age', 28)
3.增加读者对书籍的打分:
g.addE('Score').from(V('gdb_sample_reader1')).to(V('gdb_sample_book2')).property('score', 9.0f)
g.addE('Score').from(V('gdb_sample_reader2')).to(V('gdb_sample_book2')).property('score', 8.9f)
g.addE('Score').from(V('gdb_sample_reader2')).to(V('gdb_sample_book3')).property('score', 9.0f)
g.addE('Score').from(V('gdb_sample_reader2')).to(V('gdb_sample_book1')).property('score', 8.0f)
方案验证:
1.首先,我们找到小明。
g.V().hasLabel('Reader').has('name','小明')
2.然后,找到小明评价过的书。
g.V().hasLabel('Reader').has('name','小明').as('myself').out('Score')
3.找到跟小明评价过相同书籍的其他人。
g.V().hasLabel('Reader').has('name','小明').as('myself').out('Score').aggregate('scored_books').in('Score').where(neq('myself'))
4.最后,找到这些人看过的小明没有看过的书。
g.V().hasLabel('Reader').has('name','小明').as('myself').out('Score').aggregate('scored_books').in('Score').where(neq('myself')).out('Score').where(P.not(within('scored_books')))
4.2 验证二:实例监控
DBStack上内置了实例监控功能,提供丰富的性能监控项,可以查看GDB实例的资源监控、引擎监控。
借助ASE流程对GDB实例进行增删改查操作,可以看到当前实例监控根据流量的变化展现出监控曲线的变化。
4.3 验证三:备份恢复
DBStack提供实例级备份恢复能力,运维人员可以根据企业应用需求,进行备份设置,并可以使用已有的数据备份进行实例恢复。
4.4 验证四:只读实例
在对数据有大量读请求的应用场景下,可以通过创建只读实例来满足业务需要。
1. 在页面左侧导航栏,点击 GraphDB。
2. 在右侧页面,单击目标实例ID,打开实例基本信息页面。
3. 在基本信息页面右侧的只读实例分布区域中,单击新增只读。
4. 设置如下参数。
配置 |
说明 |
地域 |
实例所属地域。 |
可用区 |
实例所属的可用区。 |
实例分组 |
实例所属的资源集分组。 |
内核版本 |
GDB 支持的内核版本为Gremlin、Cypher、Automl。 |
系列 |
GDB 支持的系列为Gremlin、Cypher支持高可用版,Automl 支持基础版。 |
存储类型 |
GDB 支持的数据库存储类型为本地SSD 盘。 |
实例规格 |
实例的规格,不同的规格大小对应不同的核数和内存存储空间,具体请以控制台界面为准。 |
存储容量 |
选择实例的存储空间大小。 |
5. 完成上述参数设置后,单击确定。
4.5 验证五:故障切换、故障修复
图数据库为主备架构,具备实例级别高可用能力,当主节点出现故障时,可以进行主备切换后,再进行备库重搭对实例进行修复。
对GDB实例主节点进行故障注入,如删掉实例主节点。
1.故障注入前,观察主备节点都处于正常运行状态。
2.删除掉实例主节点后,观察流量出现短暂下跌后恢复。
3.在杜康页面上看到当前主备节点发生了切换,以前的实例备节点变为主节点对外提供服务。
4.当前实例仅存留一个节点对外提供服务,暂时无实例级别高可用能力。
5.为了修复当前实例无法提供高可用能力,在控制台上对实例操作重启来触发备库重搭。
6.观察重启后,实例对于备节点进行重建,恢复两节点对外提供服务。