图数据库

很多数据都是图状的数据,比如用户信息、用户关系,内容(视频、文章等),用户和内容之间的联系等等,这些数据以及之间的关系关联在一起,就是图状数据。

典型的图场景有:

  1. 图状数据:

1.1. 图状数据:如好友、粉丝等社交关系等

1.2. 账号映射关系

1.3. 用户和内容的行为记录历史

1.4. 广告和广告点击记录

  1. 树状数据:

2.1. 文章的转发和评论盖楼

  1. 拉链数据:

3.1. 点赞列表、评论历史

3.2. 广告点击历史、文章展现历史

业务数据 数据关系 读写场景 数据量 qps
主端点赞 点是文章和用户,边是文章 链表 写入:插入一条点赞边;读的时候存在性判断 1000亿边 300w
IES粉丝列表;点:uid, 边:粉丝关系 链表 写入:用户建立关系;读取: 大V粉丝推送 几百亿条边 几万
抖音视频好友点赞 查询用户是否点赞过某个视频 1000亿条边 120w
小说业务 写入:作者发表小说和章节,用户阅读章节;读取是查询阅读记录 几十亿条边 几千

图数据库就是数据抽象成点和边,比如用户定义成点,用户之间的关系定义成边。

类似sql一样,图数据库也有官方的查询语音-Gremlin, 已经是事实上的协议标准。

比如记录 A关注了B,那么gremlin的接口表述就是

g.addE(“关注”).from(A.id, A.type).to(B,id, B.type).property(“this”, now).property(“weight”, 10.5).property(“status”, true)


B是个大V用户,拉取B用户所有粉丝做推送 g.V().has(“type”, B.type).has(“id”, B.id).in(“关注”).range(1000, 2000).toList()

Written on November 8, 2020