图数据库HGraphDB介绍

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
简介: 一、HGraphDB概述图无处不在,社交和电商领域每天都会产生大量的实体连接数据,而描述图的方式往往是使用包括顶点和边以及丰富的属性的属性图来展现。在如今的2018年,社交网络和电商数据往往能够形成非常大的实体图,包括数十亿顶点和百亿条边这样的数据量。

一、HGraphDB概述
图无处不在,社交和电商领域每天都会产生大量的实体连接数据,而描述图的方式往往是使用包括顶点和边以及丰富的属性的属性图来展现。在如今的2018年,社交网络和电商数据往往能够形成非常大的实体图,包括数十亿顶点和百亿条边这样的数据量。而面对这样巨大的数据量,传统关系型数据库往往难以处理。

image

谈到为什么会出现图数据库,这就要谈到关系型数据表达能力远远不够的问题了。SQL表达非常复杂,往往需要多张表进行级联查询,而使用图数据结构则会更加贴近于真实世界。

HGraphDB底层基于HBase进行数据存储,方便进行水平扩展。其次,HGraphDB基于Tinker pop3实现,因此支持集成Tinker pop3全套软件栈以及Gremlin语言。此外,HGraphDB是一个OLTP图库,支持schema以及顶点和边的增删改查还有图的遍历。

image

HGraphDB支持底层的数据接入,可以通过文件以及实时的对外接口访问到HGraphDB的数据层。其底层的持久化是在HBase上,通过Gremlin的图片里实现实时的推荐和K跳查询。而还可以通过与Spark的集成直接分析HBase数据库实现诸如PageRank、联通子图等常用的图计算。

image

对于HGraphDB的全栈而言,因为偏向于OLTP,因此其核心在于Gremlin-server上,其内部包含HGraphDB的核心驱动层,其是底层的数据模型,主要负责底层对于HBase的数据访问。而因为很多用户往往携带数据使用HGraphDB产品,因此Graph-loader就可以做一些文件格式的解析,进而将数据批量导入到HBase数据库里面。Gremlin-server还能够提供HTTP和Web Socket服务,因此在客户端里面可以通过SDK、HTTP以及Web Socket来访问图数据库。同时,也可以通过命令行实现图的遍历以及计算等操作。

image

二、深入解析HGraphDB
数据模型-全局有序索引表
因为HGraphDB提供的是属性图,因此包括顶点和边以及属性,而因为HBase是一个Key-Value的表格系统,因此很容易实现订单和边的属性集的持久化存储。但是在图里面,一跳二跳相对而言比较麻烦,对于此采用了全局有序索引表来解决,通过二级索引进一步找到全部属性集。

image

如下图所示的是底层表格存储的真实的Schema格式,可以看到能够将顶点相关的In和Out这些边紧密地放在一起,只需要进行一次运算就可以拿到所有的相关顶点和边的数据。而对于Vertex表和Edge表而言,其RowKey分别是其ID,属性则通过宽列或者宽表的方式表现出来。

image

Gremlin是一种类SQL的方言,如下图所示的就是Gremlin的DSL,也就是领域特定语言,而在Tinker pop中包含了Gremlin的解释器。

image

Gremlin执行引擎的执行计划如下所示,三个步骤会形成一个Pipeline,采用懒迭代方式,而底层会对于HBase数据表进行访问,并且其执行效率是非常高的。

image

三、HGraphDB图分析
仅有了图数据库的OLTP能力是远远不够的,还需要进行图分析,这一点是通过Spark graphframes实现的。Spark graphframes可以实现常见的分析,比如filter/agg计算、以及count和sum等。这些计算在底层可以转化成基于Graphx的图计算,进而可以实现pagerank、最短路径。实施推荐、最小生成树、联通分量以及kcore等计算。Spark graphframes既可以满足进行常规汇总统计的需求,也满足测试和机器学习相关的迭代计算需求。

HGraphDB支持图计算的编程框架——GAS分解。GAS分解类似于MapReduce思想,其主要是面向顶点的编程思想,其包含了计算引擎在内,因此只需要编写想要实现的内容即可。也就是将程序拆解成三部分:Gather、Apply和Scatter。HGraphDB里面有很多分区,一个顶点会有多个不同的Partition,每个Partition里面先去做计算,之后将计算的值汇总到Master中,因此第一步叫做Gather。第二步叫做Apply,也就是改变Master节点的值。当将值修改完之后,Scatter步骤会将当前值分发到镜像顶点,将镜像顶点的值也更新完毕,同时通知邻接顶点重新进行计算。

image

如下图所示的是使用Spark graphframes进行图分析计算的示例。

image

目前,HGraphDB产品已经开放到了阿里云上。而在实现HGraphDB的过程中也做了不同的技术选型,比如与比较热门的janusgraph进行了对比和评测。之所以选择基于HGraphDB,是因为其代码量比较小,功能比较明确,可以基于其进行重写和二次开发,但是janusgraph在做数据导入的时候可能无法导入或者效率极低,在数据量大的时候,性能也会急剧下降。而HGraphDB支持用户指定ID,而janusgraph无法实现。对于数据导入而言,janusgraph导入边数据困难,效率极低,而由于janusgraph需要支持底层所有表格存储系统,而HGraphDB直接基于HBase进行了优化。此外,janusgraph做了一层抽象,将HBase完全当成黑盒,因此性能表现不佳。

image

四、使用场景以及未来工作
使用场景主要包括以下三个方面:
用户360:因为HGraphDB提供的是属性图,因此可以很容易地拿到用户属性的子图。
个性化推荐:基于图能够很容易地实现个性化推荐。
欺诈检测:可以人工标注一些黑产顶点,如果和这个顶点太近,就可能存在问题。

未来改进方向
HGraphDB是Gremlin的DSL的一种标准实现,而Gremlin提供了很多钩子让用户自己实现执行器的优化,但是现在的HGraphDB目前传输的数据量比较大,并且自身的计算能力有限,因此做全表扫描比较吃力,所以在执行器上具有较大优化空间。此外,还可以将词聚合等算子下推,以及能够增强图分析能力,将Spark作为内嵌分析引擎,实现Tinker pop OLAP规范。

感想:在如今的2018年,社交网络和电商数据往往能够形成非常大的实体图,面对这样巨大的数据量,传统关系型数据库往往难以很好地处理,因此就需要图数据库来帮助解决。而HGraphDB底层基于HBase实现,支持Tinker pop3的全套软件栈以及Gremlin语言,并且支持OLTP等,是解决图计算问题一个非常优秀的工具。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
存储 机器学习/深度学习 人工智能
知识图谱入门一:知识图谱介绍,Neo4j下载、安装基本使用
知识图谱入门一:知识图谱介绍,Neo4j下载、安装基本使用
1225 0
知识图谱入门一:知识图谱介绍,Neo4j下载、安装基本使用
|
10月前
|
机器学习/深度学习 存储 设计模式
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
本文探讨了数据基础设施设计中常见的一个问题:数据仓库或数据湖仓中的表格缺乏构建高性能机器学习模型所需的历史记录,导致模型性能受限。为解决这一问题,文章介绍了缓慢变化维度(SCD)技术,特别是Type II类型的应用。通过SCD,可以有效追踪维度表的历史变更,确保模型训练数据包含完整的时序信息,从而提升预测准确性。文章还从数据工程师、数据科学家和产品经理的不同视角提供了实施建议,强调历史数据追踪对提升模型性能和业务洞察的重要性,并建议采用渐进式策略逐步引入SCD设计模式。
391 8
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
|
JavaScript 前端开发 开发者
如何在 Python 中使用三元运算符?
【8月更文挑战第29天】
558 3
|
存储 SQL 测试技术
Flink⼤状态作业调优实践指南:状态报错与启停慢篇
本文整理自俞航翔、陈婧敏、黄鹏程老师所撰写的大状态作业调优实践指南。由于内容丰富,本文分享终篇状态报错与启停慢篇.
50720 65
Flink⼤状态作业调优实践指南:状态报错与启停慢篇
|
机器学习/深度学习 人工智能 数据挖掘
通义语音AI技术问题之TTS的生成效果和流式推理高效性如何解决
通义语音AI技术问题之TTS的生成效果和流式推理高效性如何解决
366 5
|
分布式计算 大数据 API
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
|
人工智能 数据挖掘 大数据
538个代码示例!麻省理工教授的Python程序设计+人工智能案例实践
Python简单易学,且提供了丰富的第三方库,可以用较少的代码完成较多的工作,使开发者能够专注于如何解决问题而只花较少的时间去考虑如何编程。 此外,Python还具有免费开源、跨平台、面向对象、胶水语言等优点,在系统编程、图形界面开发、科学计算、Web开发、数据分析、人工智能等方面有广泛应用。 尤其是在数据分析和人工智能方面,Python已成为最受开发者欢迎的编程语言之一,不仅大量计算机专业人员选择使用Python进行快速开发,许多非计算机专业人员也纷纷选择Python语言来解决专业问题。 由于Python应用广泛,关于Python的参考书目前已经有很多,但将Python编程与数据分析、人工智
|
机器学习/深度学习 计算机视觉 网络架构
【YOLOv8改进-卷积Conv】DualConv( Dual Convolutional):用于轻量级深度神经网络的双卷积核
**摘要:** 我们提出DualConv,一种融合$3\times3$和$1\times1$卷积的轻量级DNN技术,适用于资源有限的系统。它通过组卷积结合两种卷积核,减少计算和参数量,同时增强准确性。在MobileNetV2上,参数减少54%,CIFAR-100精度仅降0.68%。在YOLOv3中,DualConv提升检测速度并增4.4%的PASCAL VOC准确性。论文及代码已开源。
|
Python
在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存
【5月更文挑战第12天】在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存在,该函数对路径进行检查,存在则返回True,不存在则返回False。示例代码展示了如何检查'example.txt'文件是否存在并相应打印消息。此外,`os.path.isfile()`用于确认路径是否为文件,仅当是文件时返回True,否则返回False,同样配以示例说明其用法。
929 2