追溯系统数据怎么做(大数据溯源)

技术大数据中如何实现数据的高效追溯这篇文章给大家介绍大数据中如何实现数据的高效追溯,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。如何基于GES图数据库追溯服务的实现和优化。“一分钟,我要这个人的全部

本文向您介绍如何在大数据中高效地跟踪数据。内容非常详细。感兴趣的朋友可以参考一下,希望对你有所帮助。

如何基于GES图实现和优化数据库溯源服务?

“一分钟,我要这个人的所有信息。”专横的总统拍了拍你,提出了这个要求。秘书开始努力工作,发现:姓名、年龄、联系方式、爱好等等。不够吗?然后加上亲朋好友的信息和最近的活动,更完整的展现这个人。虽然是个笑话,但也给了我们一些启示:对象本身的信息可能并不“完整”,周围关联的数据也是对象信息的重要组成部分,对于数据分析和挖掘非常有用。

现实中,关系是很常见的,比如人们的社会活动、商品生产和消费行为都是相关的。在分析数据时,为了更好地利用这种关系,经常使用图作为数据结构,使用图结构存储数据的数据库称为图数据库。传统的关系数据库以表格的方式呈现数据,可以方便地查询和管理数据,而图数据库更注重节点与周围节点的连接,是一种网络结构,适用于回溯分析、社交网络分析、异构信息挖掘等应用。华为云提供的图数据库服务是GES(图引擎服务)[1]。

基于图的数据库可以做很多有趣的应用,数据跟踪是一个非常常见的应用。数据可追溯性是指关联和跟踪每个环节中产生的数据。疫情中,检查商品流通过程,检查商品是否可能接触传染源。在测试过程中,通过构建用于质量评估的测试过程网络来分析测试活动的完整性。这些是可追溯性的典型使用场景。如果使用传统的关系数据库构建数据溯源,需要独立构建和维护多个关系表,实现多对多的关系网络,这使得复杂的业务逻辑难以理解。同时还会伴随着溯源查询实现复杂、查询速度慢的问题。

大数据中如何实现数据的高效追溯

1图关系数据库和图数据库的比较

通过一个简单的例子说明了图形数据库在数据分析领域的优势。图1是一个简单的选课系统,记录了学生的选课情况和相应的课程信息。如右图所示,我们根据地图数据库的表达式将这些信息转换为地图。可以看出,该图能够更直观地表达选课与上课的关系,清晰地展现实体之间的关系,使关联分析更加方便。比如,根据图表,我们可以很容易地找到和小布一起上数学课的学生,也可以很快找到和小布有同样兴趣的学生。通过图数据库,查询周围节点的信息非常方便,非常适合追踪实现。基于图数据库的溯源服务如何实现?接下来,我们将以华为云GES为例,分析基于GES图的数据库溯源服务的实现和优化。

什么是图

在图形数据库中,图形由以下部分组成:

点:图形中的物理对象,表示为图形中的节点。比如社会中的人,流通中的商品等。可以抽象为图中的一个节点。

边:图中节点之间的关系。如人与人之间的社会关系、商品的购买行为等。

属性:用于描述图中节点或边的属性,如编号、名称等。而聚类分析中,权重常被用作关系的属性,即边的属性。

大数据中如何实现数据的高效追溯

图2有向图和无向图

根据边是否有方向,图可以分为有向图和无向图。对于有向图,边的起点和终点是确定的。在图2中,城市是一个节点,城市之间的距离和城市之间的交通方式是边。城市交通是有向图,不同方向的交通方式用不同的边来表示,城市之间的距离是无向图,因为距离与方向无关。使用GES时,点和边需要

定义GES图

GES可参考官方文件[1]了解绘制步骤。它主要定义节点和边,将数据处理成点和边文件,最后导入ges,可以通过接口或API导入。在处理无向图时,即不区分边的起点和终点时,通常会设置一个默认方向,即指定边的起点和终点。这是为了方便处理和导入数据,这个方向设置在实际查询中可以忽略。

在GES构建图形的过程中,定义点、边和相关属性的文件称为元数据。点和边的类型称为标签,每个标签可以有多个属性,例如上面提到的名称和权重,可以用作点或边的属性。在GES,一旦成功定义和创建标签,就不允许对其进行修改。如果必须修改标签定义,则有必要格式化图表,并将导入的元数据文件重新创建到图表中。

节点通常是从真实实体中抽象出来的。GES节点属性的常见数据结构包括float、int、double、long、char、char数组、date、bool、enum和string等。一般来说,在节点中,字符串类型的属性很多,可以根据数据类型选择非字符串属性。有两种类型的字符串:字符串和字符数组。数组有数据长度限制,通常为256,而字符串类型没有长度限制。但是在GES使用char数组更有优势,因为char数组数据存储在内存st中

ring类型数据存放在硬盘中,因此char array查询效率更高,这也是GES元数据定义需要注意的地方。在我们项目的场景中,节点的名称和编号都是常用的查询条件,综合考虑属性特征,如节点名称较长而节点编号较短,最终名称使用了string类型,而编号选择了char array类型。

GES查询优化

定义好节点信息后,可以在图中进行查询。GES使用的是Gremlin[3]进行查询。Gremlin是一个开源的流式查询语言,查询实现灵活,不同图数据库对查询语句的分解以及优化处理都不相同,因此,不同的写法可能查询效率可能不同。接下来我们就一种追溯查询场景进行分析。

大数据中如何实现数据的高效追溯

图4 多分支查询场景分析

如图4所示,字母代表label,也就是一种节点类型。可以看到该场景具有较多查询分支,按照图中的节点要求,Gremlin查询语句直接实现如下:

g.V(id).hasLabel('A').ouE().otherV().hasLabel('B').ouE().otherV().hasLabel('C').as('c').outE().otherV().hasLabel('F').outE().otherV().hasLabel('H').select('c').outE().otherV().hasLabel('D').as('d').outE().otherV().hasLabel('G').select('d').outE().otherV().hasLabel('H')

基于当前Gremlin,GES Gremlin server会将查询分解为多个查询原子操作,并由GES engine·执行。对于这种多跳的复杂查询,会解析为较多的原子操作并频繁交互,这会导致的查询效率低下。对于这种场景,考虑使用optional语句进行查询,效率会得到提升。查询语句如下:

g.V(id).hasLabel('A').ouE().otherV().hasLabel('B').ouE().otherV().hasLabel('C').as('c').optional(outE().otherV().hasLabel('F').outE().otherV().hasLabel('H')).optional(select('c').outE().otherV().hasLabel('D').as('d').optional(outE().otherV().hasLabel('G')).optional(select('d').outE().otherV().hasLabel('H')))

optional在一定程度上可以降低分支的查询范围,从而提升查询效率。在项目实际使用中,使用optional可以提升查询性能1倍左右。但是optional不是所有场景都适用,Gremlin实现需要根据查询场景、数据规模和数据特点进行优化处理,例如图中节点的稀疏程度和分支的数量都是可以考虑优化的点。

在对GES查询优化时,即使对Gremlin语句进行了优化,也有可能达不到期望的查询性能。这是因为使用Gremlin时,处理查询过程中Gremlin server解析后的原子操作可能会和GES engine频繁交互,反而会降低查询性能,而且针对Gremlin查询优化处理范围也有限。虽然Gremlin是图数据库通用的查询脚本定义方式,但是各个厂家对于Gremlin脚本优化处理不同,因此更推荐使用GES原生API。原生API针对固定场景做了更多的优化,并且减少了Gremlin解析处理过程,因此性能更优,但同时也引入了通用性和效率之间的平衡问题,毕竟API没有通用的定义实现。

下面我们将介绍几种常见的追溯查询场景。这些场景都可以通过Gremlin查询实现,但是如果通过使用GES系统API,可以获取更好的查询性能。

  • 场景(1) 追溯某个节点前(后)n层节点

该查询较为常见,主要用于查询某个节点的父子节点,对于图1 的场景可以找到班级的所有同学,该场景Gremlin实现如下:

g.V(id).repeat(out()).times(n).emit().path()

这种场景下,推荐使用GES算法文档中的k-hop算法解决该问题,需要注意,这个算法接口只会返回满足查询条件的子图中的所有点,但没有节点详情和边信息,如果需要节点详情可以采用batch-query批量进行节点详情查询。如果需要边信息,推荐场景(2) 使用的API。

  • 场景(2) 按条件追溯某个节点之前(后)n层节点,节点筛选条件相同

g.V(id).repeat(outE().otherV().hasLabel('A')).times(n).emit().path()

这种场景下,推荐使用repeat-query方法。该方法可以快速实现某个起点前后n跳查询,并且可以限定节点查询条件,并且所有点的查询过滤条件相同。在查询中,如果不同的点需要使用不同的查询条件进行过滤,可以先不指定点查询条件,待返回查询结果后再进行过滤。不指定点的查询场景可以退化为场景(1),并且该API可以同时返回节点和边的详情。

  • 场景(3) 按条件追溯某个节点之前(后)n层节点,不同节点筛选条件不同

图4的例子就是一个这样的场景,每层的查询label不同。这种情况下,推荐使用filtered-query进行查询,该方法需要详细指定每个节点的过滤属性,相当于将每个查询条件都在参数中一一指定,实现完全满足条件的查询。项目中,相对于Gremlin 查询,filtered-query的查询性能可以提升10倍左右。

上述三个场景中repeat-query和k-hop具有更好的泛化能力,可以随意指定查询跳数n,需要设定的参数简单。而filtered-query需要详细指定查询中每层节点的属性,参数较为复杂,具体使用中可以根据业务需求进行选择。

GES还提供了很多算法,如Node2vec, subgraph3vec,GCN算法,本文只介绍了基于GES进行节点快速查询并提供追溯服务,后续也会考虑如何基于建立好的图,进行一些数据节点融合,也可以进行相似度分析、质量评估和流程推荐等,更好地挖掘数据的价值。

关于大数据中如何实现数据的高效追溯就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/155997.html

(0)

相关推荐

  • Java 内存模型

    技术Java 内存模型 Java 内存模型Java 内存模型
    Java 内存模型简称JMM,全名 Java Memory Model 。Java 内存模型规定了 JVM 应该如何使用计算机内存(RAM)

    礼包 2021年11月24日
  • python中循环引用以及标记清除的问题分析

    技术python中循环引用以及标记清除的问题分析这篇文章主要介绍python中循环引用以及标记清除的问题分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!=1 在循环引用的情况下,引用计数就不好事

    攻略 2021年11月15日
  • Axios中值得学习的核心知识点有哪些

    技术Axios中值得学习的核心知识点有哪些本篇内容介绍了“Axios中值得学习的核心知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔

    攻略 2021年10月27日
  • 如何修改一个apk文件的签名(apk签名如何导入文件)

    技术如何手动给APK文件签名如何手动给APK文件签名,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。由于您的应用签名密钥用于验证您作为开发者的身份,并确保

    攻略 2021年12月22日
  • 1公斤柴油等于多少升,二百公斤柴油等于多少升柴油

    技术1公斤柴油等于多少升,二百公斤柴油等于多少升柴油楼上的别瞎算害人,快回去进修完小学再来回复别人的问题1公斤柴油等于多少升。国标柴油的密度范围为0.810~0.855不同型号的密度不同常用如:0#柴油0.84密度公用/

    生活 2021年10月23日
  • 怎么解决Mac下sublime打不开iTerm2的问题

    技术怎么解决Mac下sublime打不开iTerm2的问题本篇内容主要讲解“怎么解决Mac下sublime打不开iTerm2的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习

    攻略 2021年11月18日