图数据库
很多数据都是图状的数据,比如用户信息、用户关系,内容(视频、文章等),用户和内容之间的联系等等,这些数据以及之间的关系关联在一起,就是图状数据。
典型的图场景有:
- 图状数据:
1.1. 图状数据:如好友、粉丝等社交关系等
1.2. 账号映射关系
1.3. 用户和内容的行为记录历史
1.4. 广告和广告点击记录
- 树状数据:
2.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