基于图数据库搭建企业级的推荐类系统

简介: 本文为您介绍基于专有云敏捷版数据库场景DBStack和图数据库搭建企业级推荐类系统。


1. 概述

1.1 方案介绍

手机淘宝购物时,手淘上有猜你喜欢页面来推荐你可能会感兴趣的商品;使用优酷观看电影时,页面上也会推荐你可能喜欢的电影列表。个性化推荐的应用非常广泛,帮助企业挖掘潜在的用户需求、提高转化率的同时,也能够有效提升用户体验度。个性化推荐基于用户的历史行为习惯,商品、电影本身的属性等数据集,这些数据之间相互关联,应用推荐策略时需要利用这些数据之间复杂的关联关系,因此使用图数据库来存储这些数据是非常合适的。

专有云敏捷版数据库场景DBStack是阿里云企业级交易、分析、传输、治理于一体的数据库管理平台,能够帮助企业构建稳定、安全、经济的全场景数据库解决方案,快速替换Oracle、DB2、Teradata等传统数据库与数据仓库。

图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。

2. 方案架构

2.1 方案架构图

image.png  image.png

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 前提条件

  1. 已部署了DBStack数据库管理平台。

  2. DBStack上部署了GDB产品。

  3. 已经有普通用户角色的账号。

3.2 操作步骤

步骤一:快速使用GDB的基本操作包括创建GDB实例、创建账号、连接实例

  1. 创建实例,实例是虚拟化的图数据库服务器,一个服务器中只能存储一个图,GDB目前不支持同一个服务器中创建多个图。

    1. 登录DBStack控制台。

    2. 在页面左侧导航栏,点击 GraphDB

    3. 在右侧页面,单击创建GDB实例。

    4. 设置如下参数。

    5. 配置

      说明

      地域

      实例所属地域

      可用区

      实例所属的可用区

      实例分组

      实例所属的资源集分组

      内核版本

      GDB 支持的内核版本为Gremlin、Cypher、Automl

      系列

      GDB 支持的系列为Gremlin、Cypher支持高可用版,Automl 支持基础版

      存储类型

      GDB 支持的数据库存储类型为本地SSD 盘

      实例规格

      实例的规格,不同的规格大小对应不同的核数和内存存储空间,具体请以控制台界面为准。

      存储容量

      选择实例的存储空间大小

    6. 完成参数配置后,单击确定。

image.png

  1. 创建账号,在使用图数据库之前,您需要在GDB实例中创建账号。

    1. 在页面左侧导航栏,点击 GraphDB

    2. 在右侧页面,单击目标实例ID,打开实例的基本信息页面。

    3. 在左侧导航栏中,单击账号管理

    4. 单击创建账号

    5. 设置以下参数。

    6. 参数

      说明

      数据库账号

      填写账号名称。要求如下:

      • 长度为1~16个字符。

      • 以字母开头,以字母或数字结尾。

      • 由小写字母、数字或下划线组成。

      密码

      设置账号密码。要求如下:

      • 长度为8~32个字符。

      • 由大写字母、小写字母、数字、特殊字符中的任意三种组成。

      • 特殊字符为:!@#$%^&*()_+-=

      确认密码

      再次输入密码。

      备注

      非必填。备注该账号的相关信息,便于后续账号管理。最多支持256个字符。

    7. 单击确认

image.png

  1. 连接实例,完成创建实例、创建账号等操作后,您可以使用Gremlin Console或者Cypher Shell连接到GDB实例。可以在DBStack控制台通过阿里云的数据管理服务DMS登录GDB数据库。

    1. 单击目标实例ID,打开实例的基本信息页面。

    2. 单击页面右上角的登录数据库。

    3. 填写数据库账号和数据库密码,点击确认。

image.png  image.png

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)。

image.png

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')))

image.png

4.2 验证二:实例监控

DBStack上内置了实例监控功能,提供丰富的性能监控项,可以查看GDB实例的资源监控、引擎监控。

借助ASE流程对GDB实例进行增删改查操作,可以看到当前实例监控根据流量的变化展现出监控曲线的变化。

image.png  image.png

4.3 验证三:备份恢复

DBStack提供实例级备份恢复能力,运维人员可以根据企业应用需求,进行备份设置,并可以使用已有的数据备份进行实例恢复。

image.png  image.png

4.4 验证四:只读实例

在对数据有大量读请求的应用场景下,可以通过创建只读实例来满足业务需要。

1. 在页面左侧导航栏,点击 GraphDB

2. 在右侧页面,单击目标实例ID,打开实例基本信息页面。

3. 在基本信息页面右侧的只读实例分布区域中,单击新增只读。

4. 设置如下参数。

配置

说明

地域

实例所属地域。

可用区

实例所属的可用区。

实例分组

实例所属的资源集分组。

内核版本

GDB 支持的内核版本为Gremlin、Cypher、Automl。

系列

GDB 支持的系列为Gremlin、Cypher支持高可用版,Automl 支持基础版。

存储类型

GDB 支持的数据库存储类型为本地SSD 盘。

实例规格

实例的规格,不同的规格大小对应不同的核数和内存存储空间,具体请以控制台界面为准。

存储容量

选择实例的存储空间大小。

5. 完成上述参数设置后,单击确定。

image.png  image.png  image.png

4.5 验证五:故障切换、故障修复

图数据库为主备架构,具备实例级别高可用能力,当主节点出现故障时,可以进行主备切换后,再进行备库重搭对实例进行修复。

对GDB实例主节点进行故障注入,如删掉实例主节点。

1.故障注入前,观察主备节点都处于正常运行状态。

image.png

2.删除掉实例主节点后,观察流量出现短暂下跌后恢复。

image.png  image.png

3.在杜康页面上看到当前主备节点发生了切换,以前的实例备节点变为主节点对外提供服务。

image.png

4.当前实例仅存留一个节点对外提供服务,暂时无实例级别高可用能力。

image.png

5.为了修复当前实例无法提供高可用能力,在控制台上对实例操作重启来触发备库重搭。

image.png

6.观察重启后,实例对于备节点进行重建,恢复两节点对外提供服务。

image.png  image.png

作者介绍
目录