什么是图数据库?可用于追溯复杂关系

By 远方时光原创,可转载,open

合作微信公众号大数据左右手 

一、概念

图数据库是一种专门用于存储和查询图形数据结构的数据库系统。图形数据结构是由节点vertices和连接节点的边缘edges组成的,这些节点和边缘可以带有各种属性。图数据库旨在有效地处理这种图形结构,使得对图形数据的查询和分析更加高效和方便。

以下是一些图数据库的关键特征和概念:

节点(Vertices) 图数据库存储数据的基本单元是节点。每个节点通常都有一个唯一的标识符,并且可以包含属性(key-value对)以描述节点的特征。

边缘(Edges) 边缘是连接两个节点的关系。边缘也可以包含属性,用于描述节点之间的关系的特征。

属性(Properties) 节点和边缘可以包含属性,这些属性用于存储有关它们自身的信息。属性可以是简单的标量值,也可以是复杂的结构。

图形查询语言: 为了方便地查询和操作图形数据,图数据库通常提供了一种图形查询语言。Cypher、SPARQL等是一些常见的图形查询语言。

事务支持: 类似于传统数据库系统,图数据库也通常提供事务支持,以确保对数据的修改是原子性、一致性、隔离性和持久性的。

索引: 为了加速查询,图数据库通常会使用索引来提高节点和边缘的检索效率。

图算法: 一些图数据库内置了一些图算法,用于在图形数据上执行各种分析和计算任务,例如最短路径、社交网络分析等。

图数据库在许多应用领域中都非常有用,特别是对于需要处理复杂关系和网络结构的场景。一些典型的应用包括社交网络分析、推荐系统、网络和IT运营管理等。Gremlin、Neo4j、Amazon Neptune、ArangoDB等是一些流行的图数据库实现。

二、为什么要用图数据

图数据库的使用主要是基于对特定类型数据的需求,其中数据以图形结构存在,涉及多个实体之间的复杂关系。以下是一些使用图数据库的主要原因:

复杂关系的存储和查询: 图数据库适用于需要存储和查询复杂关系的场景。例如,社交网络中的用户之间的关系、网络拓扑、知识图谱等,这些都可以很自然地表示为图形结构。

实时查询和分析: 图数据库对于实时查询和分析图形数据非常高效。它们提供了优化的查询引擎,可以快速导航和检索图中的节点和边缘,适用于需要即时响应的应用程序,如实时推荐系统、实时欺诈检测等

复杂网络分析: 图数据库是处理复杂网络分析问题的理想选择。例如,在生物信息学中,图数据库可以用于分析蛋白质相互作用网络。在推荐系统中,它们可以用于分析用户之间的行为关系。

灵活的模型: 图数据库提供了灵活的数据模型,能够轻松适应数据模式的变化。与关系型数据库不同,图数据库不需要严格的预定义模式,可以动态地适应图的演化。

高度连接的数据: 对于数据之间存在大量关联和连接的场景,图数据库能够更自然地表示这种复杂性。例如,推荐系统中用户、商品和用户之间的关系,可以用图数据库更清晰地建模。

适用于半结构化数据: 图数据库通常能够有效地处理半结构化数据,因为它们不要求所有节点和边都具有相同的结构。这使得它们在处理具有不同属性和关系类型的数据时更加灵活。

内置图算法: 一些图数据库提供了内置的图算法,如最短路径、社交网络分析、图聚类等,使得在图数据上执行分析任务更加方便。

 三图数据真实案例

我工作中利用gremlin追溯复杂的发动机零部件关系

例如这个发动机零部件关系图,如果每一个子部件都有对应Id。

面对复杂的关系,二维图表很难理解部件之间的关系脉络图数据可以直观的知道整个关系图

1.你可以通过搜索某一个子部件知道他隶属于哪个主部件,或者一个主部件他有哪些子部件,用于追溯关系

 2.可以利用添加边的属性(权重)并通过前端开发知道历史关系:

fcpmc->hsm 376W0100043*** (装配时间:2024/2/12 下图中虚线)

fcpmc->hsm 376W0100033*** (装配时间:2024/2/28 下图中实线

hsm**43**是历史被装配过的,hsm**33**是最新安装的

这样复杂的历史从属关系也可以通过图数据直观理解。

 四以gremlin为例,常用命令

添加一个点以及点的属性:

g.addV('fcpm').property('id', '95xxxxxxxx').property('result_state', '1').property('component', 'fcpm').property('type_number', 'ssssssss').property('production_date', '2023-02-21 11:29:02.333000')

添加一个边以及边的属性:

边代表a--->b (b为父节点,a为子节点),可以添加属性,例如权重。

g.V('95xxxxxxx').addE('has').to(g.V('37bbbbbbbbb')).property('weight', -1673267079).property('pairing_time', '2023-01-09 12:24:39.459000')

查询下一级别节点:

g.V('376W0100****').repeat(__.in('has').simplePath()).until(inE('has').count().is(0))

 查询返回json, 可利用python Api开发接口:

Out[12]: [[{'id': '376W010567276****',
   'label': 'ccu',
   'type': 'vertex',
   'properties': {'type_number': [{'id': '29a006f3-33a1-4bd2-b55c-051f4ed5b918',
      'value': '1410C01215'}],
    'component': [{'id': '376W0105672****|component',
      'value': 'ccu_sn'}]}},
  {'id': '009747554800****',
   'label': 'hsm',
   'type': 'vertex',
   'properties': {'result_state': [{'id': '2623b2c1-8cd3-42ac-95c9-9f1d42b818e1',
      'value': '1'}],
    'component': [{'id': '0097475548****|component',
      'value': 'hsm_id'}],
    'type_number': [{'id': '2162031a-c24b-4ffc-a150-b8744966e97d',
      'value': '0097475548'}],
    'production_date': [{'id': 'a516b159-f55f-4fc7-8e29-ea7c92cc35c2',
      'value': '2022-12-15 20:53:25.827000'}]}}]]

常用命令链接:深入学习图语言Gremlin | 图数据库入门 - 知乎 (zhihu.com)

、gremlin使用python Api开发 

目前gremlin只主流编程语言主要支持python,还不支持spark

详情参考微软教程:快速入门:适用于 Python 的 Gremlin 库 - Azure Cosmos DB for Apache Gremlin | Microsoft Learn

总结 

1. 由节点和边组成,节点有节点属性(节点类型,节点创建时间等等)边代表两个节点之间的从属关系(a节点->b节点),边也有边的属性(权重等等)。

2. 写入图数据就是写入节点的信息和写入边的信息

3. 查询图数据,可以通过某一个节点,把相邻节点,甚至所有相关节点查询出来

4.一般由Python Api开发。

5.图数据库可用于复杂关系追溯等

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值