暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
K
KGraph
编辑
简介:KGraph 是快手研发的一款单机千万QPS的分布式图数据库,于2019年底开始调研开发。
简介:KGraph 是快手研发的一款单机千万QPS的分布式图数据库,于2019年底开始调研开发。
产品概览 用户评价

目录

产品简介

KGraph 是快手研发的一款分布式图数据库产品,于2019年底开始调研开发。

KGraph 设计目标

  • 高性能,目标是单机千万QPS;
  • 为了解决内存加载数据耗时长的问题,我们需要一个持久化存储引擎;
  • 为了解决本地内存数据容量不足的问题,性能和数据量支持线性扩容。

KGraph 产品架构

图片.png

整个系统可以分为三层,KV存储层,图逻辑层,以及计算层。

三层是相互独立的,可以分别实现水平拓展,如果存储的数据比较多,可以线性拓展KV存储层;如果计算任务较重,可以线性拓展计算层。

对于KV存储层,KGraph使用了高性能rpc框架KRPC和intel的新硬件PMem,实现了极致的单机性能;

对于图逻辑层,主要是对点和边的定义,也就是如何将点和边转化成KV;包括实现了点和边的增删查改等基本接口;

对于图计算层,主要设计到两个模块:

  • 第一个GraphServer,它的定位第一个是proxy,用户可以通过GRPC或者KRPC访问,第二个定位是一些图算法的实现,比如topN算法;

  • 第二个是GremlinServer,它的定位是Gremlin语言的计算层,他的存储后端依赖KGraph存储集群,多个GremlinServer组成了Gremlin分布式集群。

KV存储层

图片.png
对于KV存储层,集群包含三种角色:client,Master和DataNode。

数据根据client定义的分shard算法,存储在DataNode的各个shard当中,由DataNode服务读写。

Master主要有以下几个作用

  • 维护机器的状态;
  • shard调度:包括机器宕机时的failover,添加机器时shard迁移;
  • 维护shard的路由信息。

对于一般的的读写流程,client向Master请求路由并缓存在本地,根据client端定义的分区算法,把图相关的数据转化成KV对,通过KRPC协议写对应的DataNode。

数据模型

图片.png

KGraph基于有向异构属性图建模,如上图右侧,一个代表人的节点指向了代表视频的节点,边类型是点赞。

有向图,指的是边是有方向的,一个点的边可以分为出边和入边,出边入边分别存储;异构图,指的是允许存在多种类型的点和边,比如用户和视频分属两种不同的类型;属性图,可以理解为点和边上的键值对,比如用户具有年龄,性别等属性。

对于点的建模如下,有以下几个字段:uint64_t的id或者string类型的用户自定义id;string类型的代表类型的type,由id或者自定义id + type唯一代表一个点;属性,也就是键值对。

对于边:有确定的起点和终点;string类型的代表类型的type,由起点 + 终点 + type唯一代表一条边;属性。

KGraph和Table上的数据对比如图,DataBase和Graph对应,一个Type对应一个Table,一个点或者边对应一个Row,属性指的是Column。

使用方式

图片.png

对于KGraph的使用方式:

  1. 可以通过C++ Java SDK访问,他的形态类似上图右侧;
  2. 可以通过grpc访问;
  3. 可以访问Gremlin Server。

KGraph支持Gremlin查询语言,其一是Gremlin的生态比较完备,Gremlin生态的工具,都可以进行迁移使用;其二他是一种函数调用式的查询语言,学习成本比较低,能够很好表达复杂的查询,表达力比SDK 或者 grpc更好。

我们可以简单看两个Gremlin的例子,如右下图:第一个查询语句是对于666节点出边指向的点,其中类型是people的所有点;第二个查询语句是666号关注的所有视频主的粉丝群体,这些粉丝群体关注的女视频主按照重合度排序取前10个。

所属公司

北京快手科技有限公司

用户评价

0
0
词条统计
创建者:小小亮
编辑次数:1
浏览次数:1542
API调用次数:0
贡献者