COSCon'19 | 如何设计新一代的图数据库 Nebula

11 月 2 号 - 11 月 3 号,以“大爱无疆,开源无界”为主题的 2019 中国开源年会(COSCon'19)正式启动,大会以开源治理、国际接轨、社区发展和开源项目为切入点同全球开源爱好者们共同交流开源。git

做为图数据库技术的表明,Nebula Graph 总监——吴敏在本次大会上将会讲述了大规模分布式图数据库设计思考和实践。在信息爆发式增加和内容平台遍地开花的信息时代,图数据库在当中扮演了什么样的角色?同传统数据库相比,图数据库又有什么优点?图数据库开发须要哪些新技术?就此,开源社特访吴敏来分享下图数据库主题内容,从图数据 Nebula 的研发开始,就传统数据库面临的挑战,开源模式的优点,Nebula 的社区开展和产品规划等问题进行深刻解析。程序员

About Nebula 总监--吴敏

开源社:Hi,吴敏,先和你们介绍下本身。

你们好,我是吴敏,VEsoft 总监,博士毕业于浙江大学。 曾就任于阿里云、蚂蚁金服,从事分布式图数据库以及云存储相关工做。github

开源社:谈谈您在 COSCon'19 上的分享话题。

随着抖音、小红书等社交内容平台的爆红诞生了一种基于社交关系网路的推荐需求,而以垂直领域做为切入点的知识图谱过去两年的“爆火”,传统数据库在处理社交推荐、风控、知识图谱方面的性能缺陷,图数据库的研发应运而生。算法

本演讲开篇将陈述图数据库行业现状,让你对图数据库存储的数据及对场景有所了解,再从开源的分布式图数据库 Nebula Graph 切入深度讲解大规模分布式图数据库应该如何设计存储、计算及架构,最后讲述开源对图数据库开发的影响。数据库

内容大纲后端

  1. 图数据库概述及应用
  2. Nebula Graph 设计介绍
  3. 技术细节
  4. 开源社区及服务

开源社:哪些人能够应该了解这个内容?

对图数据库有兴趣,或是有推荐、风控、知识图谱等业务场景需求的人。微信

Nebula 研发之旅

开源社:为何给图数据库取名 Nebula ?

Nebula 是星云的意思,很大嘛,也是漫威宇宙里面漂亮的星云小姐姐。对了,Nebula的发音是:[ˈnɛbjələ]网络

开源社:如今数据库领域百花齐放,国产的 OceanBase 和 TiDB 都发展得不错,为何还要研发 Nebula 这样的图数据库?

OceanBase、TiDB 这类 NewSQL 最近发展势头很强劲,他们的出现更多的是对传统单机的关系型数据库在可用性的补充。
Nebula 聚焦在图数据库这一领域,也是近年来在数据库各分支中增加最为快速的领域。图数据库使用图(或者网)的方式很直接、天然的表达现实世界的关系: 用节点来表示实体,边来表示关联关系,everything is connected。能高效的提供图检索,提供专业的分析算法、工具,好比 ShortestPath、PageRank、标签传播等等。数据结构

开源社:图数据库应用场景有哪些?

典型的应用场景有社交网络,金融风控,推荐引擎,知识图谱等。架构

社交网络,好比,推荐一条最短路径让我结识迪纳热巴,还能够加上筛选条件,路径中的每一个人都是单身女性。

金融风控场景,好比,去查一个信用卡反套现的网络。很典型的一个场景,A 转帐到 B,B 转帐到 C,C 又转回给 A 便是一个典型的闭环。对于这样的闭环,这类查询在图数据库大规模应用以前,大部分都是采用离线计算的方式去查找,可是离线场景很难去控制当前发生的这笔交易。一个信用卡交易或者在线贷款,整个做业流程很长,而在反套现这块的审核时间又限制在毫秒级,这就是图数据库很是大的一个应用场景。

在推荐算法中,为某我的推荐他的好友。如今的方案是去找好友的好友,判断好友的好友有没有可能成为某人的新好友,这当中涉及好友关系的亲密度,抵达好友的好友的最短路径等。业务方可能会用 MySQL 等传统数据库或是 HBase 来存各种好友关系,而后经过多个串行的 Key-Value 来作查询,但这在线上场景是很难知足性能要求的。

知识图谱这些年很是火,知识图谱结合天然语言的形式在金融,医疗,互联网等众多领域被普遍使用,常见的有语音助手、聊天机器人、智能问答等应用场景。而图数据库存储的数据结构彻底适配知识图谱数据,图谱中的实体对应图数据库的点,实体与实体的关系对应图数据库的边,拿 Nebula 为例,Nebula Graph Schema 采用属性图,点边上的属性对应图谱实体和关系中的属性,边的方向表示了关系的方向,边上的标记表示了关系的类型。

再说到最近国内很是火的区块链场景,因为区块链上的全部行为都是公开被记录的又是不可篡改的,所以全部的交易行为,无论是历史数据,仍是大概每几分钟产生的新 block,均可以对 DAT 文件解析后导入到图数据库和 GNN 中作分析。例如咱们都据说在一些数字货币场景下,洗钱、盗窃、团伙、操纵市场的各种事情不少,经过图的手段包括能够帮助咱们挖掘里面的非法行为。

开源社:做为图数据库,有参考借鉴了哪些数据库吗?哪些方面是 Nebula 有特色的设计?

Nebula 是彻底自主研发的数据库,它主要有如下的技术特色

存储计算分离

对于 Nebula Graph 来说,有这么几个技术特色:第一个就是采用了存储计算分离的架构,主要好处就是为了上云或者说弹性,方便单独扩容。业务水位老是很难预测的,一段时间存储不够了,有些时候计算不够了。在云上或者使用容器技术,计算存储分离的架构运维起来会比较方便,成本也更好控制。你们使用 HBase 那么久,这方面的感触确定不少。

查询语言 nGQL

Nebula Graph 的第二个技术特色是它的查询语言,咱们称为 nGQL,比较接近 SQL。惟一大一点的语法差别就是 不用嵌套 (embedding)。你们都知道嵌套的 SQL,读起来是很是痛苦的,要从里向外读。另外,因为图这块目前并无统一的国际标准,这对整个行业的发展并非好事,用户的学习成本很高。目前有个 ISO / IEC 组织在准备图语言的国际标准,咱们也在积极兼容标准。

支持多种后端存储

第三个特色就是 Nebula Graph 支持多种后端存储,除了原生的引擎外,也支持 HBase。
由于不少用户,对 HBase 已经至关熟悉了,并不但愿多一套存储架构。从架构上来讲,Nebula Graph 是彻底对等的分布式系统。

计算下推

和 HBase 的 CoProcessor 同样,Nebula Graph 支持数据计算下推。数据过滤,包括一些简单的聚合运算,可以在存储层就作掉,这样对于性能来说能提高会很是大。

多租户

多租户,Nebula Graph是经过多 Space 来实现的。Space 是物理隔离。

索引

除了图查询外,还有很常见的一种场景是全局的属性查询。这个和 MySQL 同样,要提高性能的主要办法是为属性创建索引 ,这个也是 Nebula Graph 原生支持的功能。

图算法

最后的技术特色就是关于图算法方面。
这里的算法和全图计算不太同样,更可能是一个子图的计算,好比最短路径。你们知道数据库一般有 OLTP 和 OLAP 两种差别很大的场景,固然如今有不少 HTAP 方面的努力。那对于图数据库来讲也是相似,咱们在设计 Nebula Graph 的时候,作了一些权衡。咱们认为全图的计算,好比 Page Rank,LPA,它的技术挑战和 OLTP 的挑战和对应的设计相差很大。因此 Nebula 的查询引擎主要针对 OLTP 类的场景。
那么,对于 OLAP 类的计算需求,咱们的考虑是经过支持和 Spark 的相互访问,来支持 Spark 上图计算,好比 graphX。这块工做正在开发中,应该在最近一两个月会发布。

开源社:为何会考虑存储计算分离的架构呢?

存储计算分离是个很热的话题。咱们将存储模块和 Query Engine 层分开主要有如下考虑。

  1. 成本的缘由。存储和计算对计算机资源要求不同,存储依赖 I/O,计算对 CPU 和内存的要求更高,业务在不一样的应用或者发展时期,须要不一样的存储空间和计算能力配比,存储和计算的耦合会使得机器的选型会比较复杂,存储计算分离的架构,使得 storage 的 scale out/in 更容易。
  2. 存储层抽象出来能够给计算带来新的选择,好比对接 Pregel, Spark GraphX 这些计算引擎。一般来讲,图计算对于存储的要求是吞吐量优先的,而在线查询是时延优先的。经过把存储层分离出来,无论是开发的时候(作 QoS )仍是运维的时候(单独集群部署),都会更容易一些。
  3. 在云计算场景下,能实现真正的弹性计算。

开源社:做为一个分布式数据库,是如何保障数据一致性的?

咱们使用 Raft 协议,Raft 一致性协议使得 share-nothing 的 kv 有一致性保障。为何选择 Raft?相对于 Paxos,Raft 更加有利于工程化实现。Nebula 存储层 Raft 使用 Multi-Raft 的模型,多个 replica 上的同一个 partition 组成一个 Raft 组,同一个集群内存在互相独立 Raft 组,在一致性保障的同时,提升了系统的并发能力。

开源社:在数据库的优化方面,Nebula 作了哪些?

Nebula 在数据优化方面主要作了如下工做:

  1. 异步和并发执行:因为 IO 和网络均为长时延操做,Nebula Graph 采用异步及并发操做。此外,为避免一些大query 的长尾影响,为每一个 query 设置单独的资源池以保证服务质量 QoS。
  2. 计算下沉:为避免存储层将过多数据回传到计算层,占用宝贵带宽,条件过滤等算子会随查询条件一同下发到存储层节点。
  3. 数据库系统的优化与数据的物理存储方式以及数据的分布息息相关。并且随着业务的发展,数据分布是会发生变化的,一开始设计的索引和数据存储或者分区会慢慢变得不是最优的,这就须要系统可以作一些动态的调整。咱们 storage 支持 scale out/in, load balance。系统的调整会带来 overhead,这是须要权衡考虑的问题。

开源社:如今市面上已有一些图数据库,Nebula 考虑兼容部分数据库让已有的用户无缝切到 Nebula 吗?

Nebula 有 CSV、HDFS 批量 数据导入工具。用户能够将数仓的数据导入到 Nebula。也提供 C++,Java,Golang,Python 的客户端。另外对于市面上已有的一些产品,如今也正在开发将它的数据格式直接解析为 Nebula 的数据格式,这样就能够很是方便的迁移,包括查询语言层面的兼容。

开源社:水平伸缩可以支持多大的规模?

存储层 share-nothing 的架构,理论上支持无限加机器。

开源社:Nebula 最新的版本 RC1 支持最短路径和全路径算法,能够具体讲下这块的实现,及之后的研发规划吗?

目前实现较为简单,基于双向搜索,返回点边组合的路径。将来规划是计划在执行计划与优化器都完成后,完善对路径的支持,包括实现 match,支持双向 bfs、双向 dijkstra、allpair(全路径),kshortest 等。固然咱们欢迎社区的同窗们都参与完善 Nebula 的路径算法。

开源社:使用 Nebula 以前,用户应该作哪些准备工做?

对于刚开始使用图数据库的用户,咱们提供了详细的文档;


对于已经在使用其余图数据库,想要试试 Nebula 的用户,咱们提供了数据导入等工具,有疑问或者任何问题,欢迎在 GitHub 上给咱们提 issue,咱们的工程师会在第一时间为您解答。

Nebula 和开源

开源社:做为一个企业级产品,为何 Nebula 一开始就选择了走开源路线?

若是没 Linux,如今互联网的格局也不会是今天这样。咱们想要创建图数据库的社区,作出更好的图数据库产品,也但愿更多对 Nebula,对图数据库感兴趣的同窗成为社区的贡献者,一块儿努力,共同创建一个互助互利的社区。

开源社:在开源的过程当中,有遇到什么困难吗?

不少人都想为开源作一份力,但会被开源项目的门槛“劝退”,尤为是 Nebula 是一个即便耕耘在数据库领域多年的数据库专家,若是对图数据库的不够了解的话,都会感叹“高大上”的一个项目。但技术是为业务服务的,因此 Nebula 力求本身的文档让你即便你对图数据库一无所知,经过 Nebula 的文档也可以了解到图数据库及其应用场景。

开源社:在开源社区搭建这块,有什么能够和开源社小伙伴们分享的吗?

开源项目最重要的是生态的搭建,Nebula Graph 刚开源半年在社区搭建这块只能说略有心得,仅供你们参考 :) 开源社区运营主要从下面几个方面展开

  1. 简洁明了的文档:一个好的文档能让使用者快速同产品拉近距离,Nebula 的文档从“让非技术人作技术事”的出发,力求即便你是一个不懂技术的人也能够按照文档部署 Nebula,玩起来——用 Nebula 完成简单的 CRUD,若是开源社的小伙伴阅读过 Nebula 文档以为哪里有更改意见,欢迎联系咱们;
  2. 实时的反馈回复:用户的反馈,咱们会第一时间进行回复,在 GitHub 的 issue 及用户交流群里进行回复;
  3. 同用户直接对话:在线上,Nebula 在各大技术平台同图数据库和 Nebula 爱好者们进行交流,包括 Nebula 架构设计、用户使用实操等系列文章;在线下,咱们也开展了主题 Meetup 同各地爱好者交流图数据库技术及 Nebula 的开发心得;
  4. 社区用户体系:在 Nebula 的 GitHub 上,现阶段你能够看到 3 种用户,User、Contributor、Committer,User 经过向 Nebula 提 issue / pr 或者投稿等方式成为 Contributor,Contributor 再进阶成为 Committer。配合 Nebula 开展的各种社区活动,eg:捉虫活动,帮助社区用户完成角色“升级”;

最后,打个小广告:欢迎你们来参与到 Nebula 的建设中,为开源贡献一份力 :)

程序员寄语

开源社: 做为资深数据库从业人员,怎样让本身的眼界更加开阔,怎么获取这个领域的最前沿信息?


多看看论文,看看开源分布式系统的设计以及源代码;多关注数据库的的会议,好比,SIGMOD, VLDB,关注学术界的最新成果;多关注业界相关公司的发展和动态,好比 OsceanBase,TiDB。

Nebula 有话说

以上为开源社对图数据库 Nebula 总监——吴敏的采访,欢迎你关注 Nebula GitHub:github.com/vesoft-inc/nebula 了解 Nebula 最新动态或添加 Nebula 小助手为好友进图数据库技术交流群交流,小助手微信号:NebulaGraphbot

推荐阅读

相关文章
相关标签/搜索