摘要:在DTCC 2019大会上,阿里云智能数据库产品事业部高级技术专家王炎进行了题目为《探索互联数据的奥秘——图数据库GDB》的演讲,阿里图数据库GDB是一种支持属性图模型、用于处理高度连接数据查询与存储的实时、可靠、可扩展的在线数据库服务。本次演讲深入浅出的介绍了图数据库的概念和使用场景,以及如何快速构建基于高度连接的数据集的应用程序。
专家简介:王炎(花名:夜炎),阿里云智能数据库产品事业部高级技术专家。在分布式系统、存储领域以及NoSQL系统研发领域经验丰富。18年加入阿里巴巴集团,现在阿里负责图数据库系统相关研发工作。
直播回放
链接:https://yq.aliyun.com/live/1050
议题PPT下载,戳这里!
https://yq.aliyun.com/download/3555
申请图数据库GDB公测资格
https://page.aliyun.com/form/act124314140/index.htm
本次演讲主要分为三个部分,首先介绍图数据库GDB的简介和场景。之后分享图数据库GDB的特点,最后介绍图数据库GDB的一些使用范例。
一、图数据库GDB的简介和场景
图数据库(Graph Database, 简称GDB)是阿里巴巴自主研发的支持属性图模型,用于处理高度连接数据查询与存储,并且实时可靠的在线图数据库服务。支持TinkerPop Gremlin查询语言,可以帮助用户快速构建基于高度连接的数据集的应用程序。经常有人会问图数据库是不是存储图片的数据库,或者说是不是提供地图服务的数据库,图数据库中的图是数据结构中图的概念,它的关键元素是点、边和属性。图数据库的通俗定义是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项,与数据节点和节点间表示关系的边的集合相关联。
接下来简单介绍一些使用图数据库的场景,比如社交场景就是一个非常典型的业务场景,图数据库可以轻松应对海量高度互连社交数据的实时存储和高效查询,帮助您快速构建复杂的社交网络系统。目前,社交场景有一个被广泛提及的理论——六度理论,通过六度关系,大家可以认识地球上的所有人。因此,在一个典型的社交网络中,常常会存在“谁认识谁,谁上过什么学校,谁常住什么地方,谁喜欢什么餐馆之类的查询”,传统关系型数据库对于超过3度的查询往往会很低效甚至无法支持,但图数据库从基因层面提供了解决方案,轻松应对社交网络的各种复杂存储和查询场景。
比如,使用GBD来支持集团部业务的时候,需要处理淘宝用户和用户之间的亲戚关系,当用户去更新自己长辈的信息后,图数据库可以实时判断是否会形成环,以此来进行相关信息的校验,另外,使用图数据库进行多跳查询的时候,可以很轻松的拉取好友的好友,以及多跳好友,相比于Mysql数据库,GDB能够提供更好的性能。
第二种典型的业务场景是金融欺诈检测场景,在金融领域,图数据库经常用于欺诈检测场景。例如,通过使用贷款、分期消费者的联系人(或者联系人的联系人)信用信息,对用户进行信用评分,如果评分较低,则拒绝贷款或者提升利率;通过申请人的个人信息(包括电话号码、家庭住址),判断申请人信息是否属实。通常,欺诈者是通过“黑市”购买的用户信息然后拼凑出的“个人信息”,并且这些信息会被反复使用,使用图数据库,可以快速的发现申请人提供的个人信息与现有的用户信息的关系。
第三种典型的业务场景是实时推荐场景,图数据库非常适合实时推荐场景。通过将用户的购买行为,位置,好友关系,收藏等数据实时的存储在图数据库中,然后利用图数据库能对高度互连数据提供高效查询的特点,通过各种维度的快速查询实时进行多维度个性化推荐。例如,在某APP中,通过用户位置及以前的购买行为信息,当某用户A到达某商场B,APP可以向用户实时推荐附近的门店及商品等信息。第四种典型的业务场景是知识图谱场景,图数据库可以快速的构建知识图谱。将图谱数据存储在图数据库中,既可以通过外部输入实时更新,也可以对图数据库内部图谱信息进行分析来不断发现并完善图谱数据。比如,基于图数据库,可以快速实现像针对足球明星的知识图谱应用,帮助用户浏览,发现感兴趣的信息。
但目前知识图谱是一种比较新兴的技术,还没有一个比较完善的开源产品供大家来使用。最后一种业务场景是网络/IT运维场景,图数据库非常适合网络/IT运营相关场景,比如,通过将路由器,交换机,防火墙,服务器等各种网络设备和终端及其拓扑信息存储在图数据库中,当某服务器或终端遭受恶意攻击或者受到感染时,可以快速通过图数据库快速分析并找到传播路径,然后进行相关的追踪及处理。
二、图数据库GDB的特点
图数据库GDB和现有的图的系统是有比较大的差异的,第一,GDB是一个云原生的、自运维的数据库服务,也就是说GDB是一个开箱即用的服务,只需要通过公有云申请即可使用,而无需使用一些开源的或者其他的商业版本来托管运维,同时GDB是高可用的,通过一个主备的HA架构,当主节点的出现故障的时候,会自动的切换到备用的计算节点,可以最大程度的保证业务不受中断。同时在存储方面也使用了多份存储和自动备份的方式来让用户的存储数据不会丢失。
第二,GDB是易于使用的,现有的图系统还是更偏向于分析类的系统,使用场景常常是通过Mysql或者是阿里的ODBS准备好数据,批量导入到图系统中进行分析,最后把结果导入到缓存系统中供在线的业务进行查询。这种情况的应用性并不是非常好,但对于图数据库GDB来说,它提供了一个OLTP的事务保证,因此在进行查询的同时,也可以对数据库的内部数据进行一个并发的更新,且完全不会导致数据内部关系的损坏,其次,图数据库GDB具有很好的扩展性,目前存储是自动弹性扩容的,计算能力也可以根据用户的需求来进行调整。
第三,GDB具有更快的查询和更新性能,图数据库GDB拥有毫秒级的查询时间和百万级的遍历能力,GDB中包括计算图的计算层,存储层都是自主研发的,因此能够掌控全链路上面的所有系统,因此可以更好的构建统计信息和代价估算的模块,通过代价的估算可以更好的选择查询策略、并行策略,因此可以使查询和更新性能更快,这也是使用开源的大数据系统很难做到的一点。
第四,GDB完整支持TinkerPop3.x开放标准,这样可以通过开源的生态去获取更好的可迁移性,这也是图数据库GDB和其他数据库不太一样的地方。
接下来对图数据库GDB的部分特性进行详细的介绍,首先是服务高可用,GDB高可用版本采用一主一备的经典高可用架构,主备都采用独立的图数据库节点,计算与存储分离,主备之间通过复制实现数据同步,一旦主库发生故障,将迅速检测并触发主备切换来保证可用性。备库故障对业务无影响,但会快速被检测到并触发备库自愈。未来提供一写多读实例后,所有读写实例将共享底层存储资源,提升扩展性的同时也将带来整体存储成本的进一步降低。也就是说,GDB是通过前端的负载均衡把请求转发到主数据库节点,之后通过后端的管控来监控主实例,如果主实例出现故障,管控会自动切换到备用实力,同时因为使用的是目前主流的共享存储架构,因此所有的数据都不会受到任何的影响,这样的好处是用户无需搭建自己的架构来保证节点的可用性。
其次,GDB提供备份与恢复的功能,默认的策略是通过配置的方式,让整个图系统的数据自动保存到对象存储的OSS中,同时GDB也支持人工操作的方式进行备份,主动的生成数据库的备份并上传到对象存储中,当因为操作不当导致数据损坏,或是因为业务上的决策需要,便可以将数据恢复到任意的指定的时间点上,因为GDB是把一段时间内的所有事务日志全部备份下来,因此GDB可以指定到秒级别的事务恢复。
GDB在自动索引和Schema-Free上也提供了更加便捷的机制,因为希望用户能够去更加方便的使用图系统,所以GDB提供自动索引的功能,自动索引是指图的所有的点边关系,所有点的属性、边的属性都会建立B-Tree类型的索引,这样用户完全不用关心某一个属性是否需要建立索引,或者什么类型的索引。因此在进行前缀查询的时候,或者说需要比较属性之间大小的时候,便可以通过索引来提供最优的查询方式,节省大量DBA的相关工作。对于Schema,目前采用的是Schema-Free的方式,Schema-Free最大的好处是用户无需考虑数据需要符合怎样的数据类型,表需要多少列,也就是说,在图数据库GDB中,表所支持的列是不受限制的,因此,对于业务方面,GDB能够对开发的应用型提供最大的支持。
在监控告警方面,GDB提供了原生的监控和告警的平台,可以通过控制台取到所有的负载信息,包括CPU,IOPS的使用情况等,在数据导入方面,GDB支持从对象存储里面将用户的数据直接导入进来,目前提供的导入形式是在线导入,用户在查询或者是在正常使用的时候,无需暂停现有的业务,可以直接可以导入新的数据,目前,离线导入的方式也正在开发中,离线导入能够提供更好的导入性能,用户在初次配置后,可以把现有数据完整的通过重置实例的方式导入进来,这样能够更快的启动图数据库GDB及相关服务。
最后来讨论一下图数据库GDB和关系型数据库的区别,很多人可能都会疑惑,图数据库GDB和关系型数据库到底有什么不同?直接使用Mysql是不是也可以提供相应的服务?其实对于高度连接的数据模型的话,这两种数据库是有明显差别的,如果查询只有一跳,最多两跳的情况下,图数据库GDB和Mysql是没有太大差别的,甚至Mysql能够提供毫秒级的查询能力,但是当数据关系的深度增加后,Mysql的查询性能便会急剧下降,下降的主要原因是因为进行多跳查询的时候,会进行自身表和自身表的join操作,对于这种递归的join操作,目前Mysql没能提供一个很好的解决方案。对于数据是社交类的用户,在进行三条以上的查询时,Mysql的查询时间很可能已经超过一分钟了,但对于图数据库GDB依然能够提供一个毫秒级的查询时间。因此图数据库GDB可以为高度连接的数据提供一个更好的使用体验。
GDB的内部抽象是一个属性图的抽象模型,也是现在的最主流的图模型,目前也在考虑提供学术领域的RDF模型。在客户端SDK中,图数据库GDB支持多种编程语言的SDK,包括java、python、.net以及rest:api,兼容TinkerPop 3.4.x及以上版本,目前,也紧密跟踪社区的动态,一旦发布4.0版本,将会第一时间进行支持。
三、图数据库GDB的使用范例
首先是社交领域的范例,社交领域主要关注的是人和人之间的关系,比如说谁是谁的好友,谁关注的谁,或者说谁对谁做了评论,这些事务在社交软件里是非常频繁的,有一些操作是比较重度,在Mysql中难以做到的,比如查找排名前三的网络大V,或者是查找 两个用户之间限定查询深度的最短路径,在图数据库GDB中可以提供一个亚秒级别的查询性能,目前最短路径是使用的最为广泛的算法。
其次是推荐场景的范例,推荐场景往往是基于人的,比如获得一个人评价过的所有书,或者是查询也评价过这些书的其他人看过的,但这个人没看过的书的列表,然后对这个人进行推荐,可以看到写出来的查询语句还是比较简单的。
最后是人与人关系的范例,这个例子比较直接,比如通过出边的方式去查询一下刘备的义弟到底是谁,或者通过去拉取刘备和曹操所有的下属取交集来谁在曹操和刘备阵营都效力过。