如何使用GraphDB做商品实时推荐

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介:

几乎所有的企业都需要了解如何快速并且高效地影响客户来购买他们的产品并且推荐其他相关商品给他们。这可能需要用到云服务的推荐,个性化,网络分析工具。图非常适合这些类似的分析用例,如推荐产品,或基于用户数据,过去行为,推荐个性化广告。下面我们来看看怎么使用图做个性化推荐

购买graphdb服务

  • 登录www.aliyun.com 后进入hbase产品控制台,选择创建hbase集群
    buy-guide-1
  • 选择Graphdb(图)子产品,之后分别勾选付费方式,地域,可用区,网络类型,vpc。跟选购其他产品一致
    g2
  • 接来下选择master及core的规则,购买core个数及磁盘容量,参考自身实际需求,这里笔者这里选择4核8G,之后选择立即购买
    g3
  • 之后同意协议完成支付,回到hbase控制台,当前状态初始化,等待集群创建完毕
    g4
  • 集群创建完毕后,可以拿到如下图库地址,记住这个地址,替换下面命令行中的$host变量
    g5

如果需要使用graph-loader工具批量导入数据,请联系钉钉 云hbase答疑 我们帮您开通hbase服务端口

  • 修改访问控制,把客户端ecs加入访问白名单
    g6

g7

  • 在客户端ecs执行如下命令,有消息体返回,说明客户端可以正常访问graphdb了。
    如果出现异常先尝试telnet $host 8180,如果不通则说明需要添加这台ECS IP至访问白名单
curl -XPOST -d '{"gremlin": "1+1" }'  http://$host:8180
{"requestId":"9db39735-9b69-4425-b58c-2b8c230d2fb9","status":{"message":"","code":200,"attributes":{}},"result":{"data":[2],"meta":{}}}

接下来您可以使用练习下graphdb快速入门

构造图示数据模型

用户在电商网站会产生订单历史记录,订单会包含一堆商品,让我们构造一个如下图数据模型

undefined

数据建模

我们重点考虑下面三类顶点,顾客customer, 订单order, 产品product

  • 顾客下订单行为用 ordered边分别关联customer,order顶点
  • 订单会包含多个商品,定义contains边,分别连接order顶点及product顶点。
    表示一个订单会包含多个商品。

丰富顶点及边的属性
作为示例,我们假定

  • 顾客只有customerid, name
  • order顶点只要orderid, ordertime
  • product顶点只有productid, name。
  • ordered/contains边暂时不需要额外属性字段,

创建schema

我们使用hgraphdb-loader导入图schema及数据,hgraphdb-loader下载地址: http://public-hbase.oss-cn-hangzhou.aliyuncs.com/installpackage/hgraphdb-loader.tar.gz
创建schema.json文件,编写如下schema

{
  "vertexLabels" : [ {
    "name" : "customer",
    "properties" : [ {
      "name" : "id",
      "type" : "String"
    }, {
      "name" : "name",
      "type" : "String"
    } ],
    "indexes" : [ {
      "propertykey" : "name",
      "unique" : false
    } ]
  }, {
    "name" : "order",
    "properties" : [ {
      "name" : "id",
      "type" : "String"
    }, {
      "name" : "ordertime",
      "type" : "Date"
    } ],
    "indexes" : [ ]
  }, {
    "name" : "product",
    "properties" : [ {
      "name" : "id",
      "type" : "String"
    }, {
      "name" : "name",
      "type" : "String"
    } ],
    "indexes" : [ ]
  } ],
  "edgeLabels" : [ {
    "name" : "ordered",
    "properties" : [ ],
    "indexes" : [ ],
    "connections" : [ {
      "outV" : "customer",
      "inV" : "order"
    } ]
  }, {
    "name" : "contains",
    "properties" : [ ],
    "indexes" : [ ],
    "connections" : [ {
      "outV" : "order",
      "inV" : "product"
    } ]
  } ]
}

准备顶点&边数据集,csv格式

所有的顶点都放到一个vertex.csv文件中

1,customer,oAECseuFIx
2,customer,UpOqBuMQSG
3,customer,WTlnfKULti
10001,order,2015-09-06
10002,order,1998-06-08
110001,product,ZDoVtEBlDq
110002,product,GXsssxOJSq

...

所有的边都放到一个edge.csv文件中

9610,58824,ordered
2069,12200,ordered
85589,113864,contains
50591,110945,contains

我们直接准备了一些测试数据, 点击此处下载

hgraph-loader执行导入

点击下载工具
执行解压,进入目录,执行如下导入命令。

sh run.sh import emr-header-1,emr-header-2,emr-header-3 demo/schema.json demo/vertex.csv demo/edge.csv

使用gremlin-console做图遍历

下载gremlin-console客户端,解压,

remote.yaml 配置remote server地址, 购买graphdb后控制台可以看到这个地址。

hosts: [$host]
port: 8180

打开gremlin-console

bin/gremlin.sh

连接gremlin-server,并设置脚本自动提交至server

gremlin> :remote connect tinkerpop.server conf/remote.yaml session
==>Configured localhost/127.0.0.1:8180-[b1725987-7f5a-4a61-914a-d0ab39473105]
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:8180]-[b1725987-7f5a-4a61-914a-d0ab39473105] - type ':remote console' to return to local mode

执行

使用如下germlin语句做实时推荐,为id=2的顾客做商品推荐
注:无超级顶点的小图场景可以这样查询,生产环境配合使用dedup()操作

gremlin> g.V("2").as("customer").out("ordered").out("contains").aggregate("products").in("contains").in("ordered").where(neq("customer")).out("ordered").out("contains").where(not(within("products"))).groupCount().by("name").order(local).by(values,decr).limit(local,5)
==>[SUKjnHCshw:13,pqiGHapYGW:12,ktkZSKsEdK:11,twLtDaYJmo:11,JAbhZdfhkO:10]

如果使用关系型数据库,sql如下:

select top (5) [t14].[productname]
    from (select count(*) as [value], [t13].[productname]
            from [customers] as [t0]
    cross apply (select [t9].[productname]
                    from [orders] as [t1]
                cross join [order details] as [t2]
                inner join [products] as [t3]
                        on [t3].[productid] = [t2].[productid]
                cross join [order details] as [t4]
                inner join [orders] as [t5]
                        on [t6].[customerid] = [t5].[customerid]
                cross join ([orders] as [t7]
                            cross join [order details] as [t8]
                            inner join [products] as [t9]
                                    on [t9].[productid] = [t8].[productid])
                    where not exists(select NULL as [empty]
                                        from [orders] as [t10]
                                cross join [order details] as [t11]
                                inner join [products] as [t12]
                                        on [t12].[productid] = [t11].[productid]
                                      where [t9].[productid] = [t12].[productid]
                                      and [t10].[customerid] = [t0].[customerid]
                                      and [t11].[orderid] = [t10].[orderid])
                    and [t6].[customerid] <> [t0].[customerid]
                    and [t1].[customerid] = [t0].[customerid]
                    and [t2].[orderid] = [t1].[orderid]
                    and [t4].[productid] = [t3].[productid]
                    and [t7].[customerid] = [t6].[customerid]
                    and [t8].[orderid] = [t7].[orderid]) as [t13]
                where [t0].[customerid] = N'1' //customerId
            group by [t13].[productname]) as [t14]
order by [t14].[value] desc        

可见非常繁琐,效率低下

相关实践学习
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
27天前
|
数据采集 存储 监控
淘宝详情数据采集(商品上货,数据分析,属性详情,价格监控),海量数据值得get
淘宝详情数据采集涉及多个环节,包括商品上货、数据分析、属性详情以及价格监控等。在采集这些数据时,尤其是面对海量数据时,需要采取有效的方法和技术来确保数据的准确性和完整性。以下是一些关于淘宝详情数据采集的建议:
|
2月前
|
机器学习/深度学习 JSON 监控
智能定价模型:借助API实时更新商品价格信息
在电子商务的迅猛发展中,价格战成为商家间常见的竞争方式。然而,一成不变的价格策略无法满足市场的即时需求和消费者的多变偏好。因此,智能定价(也称为动态定价)成为了电商平台提升市场竞争力的关键工具。智能定价模型通过实时监控市场数据和消费者行为,自动调整商品价格以最大化收益或实现其他商业目标。本文将深入探讨如何利用API技术实现智能定价,并提供一个Python代码示例来指导读者进行实时价格更新。
|
3月前
|
数据挖掘 API
京东商品详情API:数据分析和挖掘以优化销售策略
商品关联分析:通过分析商品之间的关联规则,商家可以发现哪些商品经常一起被购买,从而制定捆绑销售或搭配销售策略,提高客单价和用户满意度。
|
2月前
|
数据采集 存储 监控
京东商品详情数据采集方法代码展示
京东商品详情数据采集方法代码展示
26 1
|
3月前
|
机器学习/深度学习 分布式计算 数据挖掘
淘宝/天猫店铺商品详情 API 实现实时数据获取:快速、稳定、高效
淘宝/天猫是中国最大的电商平台之一,拥有海量的商品数据。对于商家来说,了解店铺内所有商品的实时信息非常重要,可以帮助他们更好地管理商品、制定营销策略等。本文将介绍如何使用淘宝/天猫的API接口来获取店铺的所有商品信息,并实现实时数据获取。
|
3月前
|
JSON 分布式计算 API
淘宝/天猫获得淘宝商品详情 API 如何实现实时数据获取?
随着电商行业的快速发展,越来越多的商家开始将业务拓展到线上。而淘宝作为中国最大的电商平台之一,其商品数量和交易额均居于世界前列。因此,对于商家来说,了解商品的实时信息非常重要,可以帮助他们更好地管理商品、制定营销策略等。本文将介绍如何使用淘宝/天猫的商品详情API接口来实现实时数据获取。
|
3月前
|
搜索推荐 前端开发 数据挖掘
拼多多根据ID取商品详情原数据 API 实现实时数据获取的完整指南
在电商行业中,商品详情页是用户了解商品信息、进行购买决策的重要页面。为了提高用户体验和促进销售,电商平台通常会提供商品详情的API接口,以便第三方应用能够实时获取商品数据。本文将介绍如何使用拼多多获得的根据ID取商品详情原数据的API实现实时数据获取,并提供相应的代码示例。
|
3月前
|
存储 数据可视化 API
利用淘宝/天猫API实现商品数据的实时获取、处理与分析
随着电子商务的飞速发展,对电商平台的数据需求越来越高。对于商家而言,实时获取商品数据是关键。淘宝和天猫作为中国最大的电商平台,提供了丰富的API接口,其中包括按关键字搜索商品API。本文将详细介绍如何使用淘宝/天猫提供的API接口实现按关键字搜索商品数据的实时获取,并给出具体的代码示例。
|
4月前
|
存储 安全 搜索推荐
深入探索服装网商品详情API:实时数据获取、安全与隐私保护及商业价值实践
服装网商品详情API将为商家提供更多机会和竞争优势。然而,需要注意的是,在利用API进行商业应用时,应遵守相关法律法规和平台规定,确保数据的合法性和隐私保护。同时,对于API的使用也应当进行合理的规划和资源分配,避免过度依赖或滥用API导致不必要的风险和损失。
|
4月前
|
存储 缓存 监控
Lazada商品详情API在电商中的价值及实时数据获取实践
在电商行业,数据是驱动业务增长的关键。Lazada作为东南亚地区知名的电商平台,其商品详情API对于电商行业具有深远的影响。本文将探讨Lazada商品详情API在电商行业中的重要性,并介绍如何实现实时数据获取。