全部产品
云市场
云游戏

社交应用场景

更新时间:2019-08-15 14:22:00

概述

社交类业务场景的数据模型天然具备高度连接的特点,用户以及用户关系中的好友、点赞、评论等关系已经是图中的节点和边的概念。在传统的关系型数据库中,需要将这些节点和边转化成表数据结构存储起来,并且在展示的时候,再将表结构转化为节点和边的关系,效率损耗严重。

图数据库GDB可以为社交类业务提供天然的图模型支持,更加完美的匹配和理解您的数据。使用图数据库GDB,可以显著提升社交类业务程序的开发效率和质量,减少数据模型转换带来的额外损耗。

数据模型

比如,以简化之后的好友关系为例,我们可以将数据模型抽象为:


图数据库GDB使用属性图模型来表示和处理数据。上图中的元素为:

  • User:用户节点

  • Follow:代表单向的好友关系,比如关注,或者是对方的粉丝

示例

  • 简单增删查改添加一个姓名为xiaoming的用户,用户ID为u01,年龄为18岁。
    1. gremlin> g.addV('User').property(id, 'u01').property('name', 'xiaoming').property('age', 18)
    2. ==>v[u01]
  • 查找所有姓名为xiaoming的用户的所有信息
    1. gremlin> g.V().has('name', 'xiaoming').valueMap(true)
    2. ==>[id:u01,label:User,age:[18],name:[xiaoming]]
  • 查找所有姓名为xiaoming的用户,并将年龄更新为20
    1. gremlin> g.V().has('name', 'xiaoming').property('age', 20)
    2. ==>v[u01]
    3. gremlin> g.V().has('name', 'xiaoming').valueMap(true)
    4. ==>[id:u01,label:User,age:[20],name:[xiaoming]]
  • 删除所有姓名为xiaoming的用户
    1. gremlin> g.V().has('name', 'xiaoming').drop()
    2. gremlin> g.V().has('name', 'xiaoming').valueMap(true)
    3. gremlin>
  • 关注用户u01在手机上关注了u02,添加一条从节点u01u02的边,并且设置对应的属性
    1. gremlin> g.addE('Follow').from(V('u01')).to(V('u02')).property(id, 'follow_u01_u02').property('client', 'iOS')
    2. ==>e[follow_u01_u02][u01-Follow->u02]
  • 获取关注列表查询ID为u01的用户的关注列表
    1. gremlin> g.V('u01').out('Follow')
    2. ==>v[u02]
    查询ID为u02的用户的粉丝列表
    1. gremlin> g.V('u02').in('Follow')
    2. ==>v[u01]
  • 全局分析我们有时候需要对全体用户做一些分析,比如查询排名前三的网络大V
    1. gremlin> g.V().project('user','degree').by().by(inE().count()).order().by(select('degree'), desc).limit(3)
    2. ==>[user:v[fraud],degree:4]
    3. ==>[user:v[Doug],degree:2]
    4. ==>[user:v[u02],degree:1]
    查询两个用户u01u02之间的最短路径,最大深度为10
    1. gremlin>g.V('u01').store('x').repeat(out().where(without('x')).aggregate('x')).until(hasId('u02').or().loops().is(eq(10))).hasId('u02').path()