《专场5.1-字节跳动图数据库架构演进-陈超.pdf》由会员分享,可在线阅读,更多相关《专场5.1-字节跳动图数据库架构演进-陈超.pdf(35页珍藏版)》请在三个皮匠报告上搜索。
1、字节跳动图数据库架构演进索引和执行优化陈超 字节跳动 研发工程师简介架构关键问题1.1 ByteGraph 可以做什么 字节有哪些业务数据呢?用户信息、用户关系内容(视频、文章、广告等)用户和内容联系(点赞、评论、转发、点击)使用图表达业务场景的优势建模直观简洁挖掘数据关联 ByteGraph 特点高吞吐低延迟最终一致兼容 GremlinByteGraph 学术论文已被 VLDB-2022 收录1.2 Gremlin 查询接口Gremlin 简介Gremlin 是一种图灵完备的图遍历语言相较 cypher 等查询语言,功能更全面,上手较为容易,使用更加广泛主流云厂商的图数据库都提供了对 Gre
2、mlin 的支持,ByteGraph 目前支持一个子集数据模型有向属性图点和边上都可以携带多属性,支持动态加减属性列举例用户A所有一跳好友中满足粉丝数量大于100的子集g.V(vertex(A.id,A.type).out(好友).where(in(粉丝关注).count().is(gt(100).toList()搜索知识图谱:求中国出生的、配偶是日本人的女明星g.V().has(出生地,中国).has(性别,女)and(out(配偶).has(出生地,日本),out(职业,明星)电商风控图谱:求昨天内 uid=111 用户的订单中,给 id 为 222 的店的订单数g.V().has(uid
3、,111).out(订单).groupCount().by(id).unfold().where(select(keys).is(222).select(values)1.2 Gremlin 查询接口举例-UGC场景1.2 Gremlin 查询接口举例-UGC场景1.3 ByteGraph 业务介绍1000+业务集群1.3 ByteGraph 业务介绍-店铺/商品关系 构图 店铺拥有的商品,店铺拥有的品类,商品所属的品类 查询 查询店铺下有哪些品类 筛选某个品类下价格处于xx-xxx之间的某种商品。商品具有“价格属性”。但是为了加快查询,在商品到品类之间等边上冗余了商品点 price 属性简介
4、架构关键问题02.ByteGraph 架构-整体架构整体分为三层,每层由多个进程实例组成集群查询层和内存存储层可以混合部署或独立部署分布式 KV 为可插拔02.ByteGraph 整体架构查询引擎层(GQ)用户session管理,服务的proxy 层gremlin 查询语言的parser分布式的数据库执行器executorGS层数据分布路由模块go语言实现存储引擎层(GS)负责把全图数据切分成子图(partititon),完成partition的存储和缓存负责partition分布策略负责partition的内存组织和磁盘组织方式实现WAL,支持事务C+编写,追求极致性能磁盘存储层负责管理磁盘
5、资源目前依赖第三方的分布式 KV 系统,下个版本会自研图原生存储2.1 ByteGraph 架构-查询引擎Client端&接入层设计Go、C+、Python、Java SDKQuery Parser&Rewriter将 Gremlin 解析成语法树将语法树改写为执行计划树Plan Optimizer基于规则的优化(RBO)基于代价的优化(CBO)Plan ExecutorPush 模式的 pipeline 驱动器支持行式&列式执行2.1 ByteGraph 架构-查询引擎层-查询引擎查询层(GQ)和MySQL的SQL层一样,主要工作是做查询的解析和处理;其中“处理”可以分为以下三个步骤:Par
6、ser 阶段:一个手写的递归下降解析器,将查询语言解析成一个查询语法树生成查询计划:把步骤1中的查询语法树按照一定的查询优化策略(RBO&CBO)转换成执行计划为了减少解析和优化的开销,我们支持了查询计划缓存执行查询计划:和Graph Storage 层(GS)交互,完成查询计划;需要理解存储层数据分Partition的逻辑,找到数据,下推算子,merge查询结果,完成查询下图是一个查询的执行流水线g.V().has(id,1).has(type,person).out(knows).has(age,gt(18).values(name)2.1 ByteGraph 架构-查询引擎层-查询优化