一文聊“图”,从图数据库到知识图谱

作者 | 穆琼
责编 | 晋兆雨
头图 | 付费下载于视觉中国

随着知识图谱的发展,图数据库一词被越来越多的提到。那么到底什么是图数据库,为什么要用图数据库,如何去建设一个图数据库应用系统,图数据库与知识图谱到底是什么关系。今天为大家揭开神秘面纱,以Neo4j为例,浅析图数据库相关技术。

作者介绍:穆琼 中国农业银行研发中心,致力于AIOps的落地。

图数据库简介

谈到图数据库,首先要聊聊“图”,这里的图不是计算机视觉、图像处理领域的图,而是图论中的图,它由节点和节点间的线组成,通常用来描述某些实体与它们之间的特定关系。下图就是一个典型的图示例,某企业网络设备拓扑和报警管理应用方案的示意图。

现实世界中的图无处不在,社交领域人与人的关系挖掘、零售领域商品购买的关联推荐、金融领域的反欺诈反洗钱,都是图技术的典型应用。但是图的存储在过去一直没有特别好的方案。历史的方案可以概括为两类,第一类基于传统关系型数据库,将图中的关系用外键或关联表来表示,这种方式对于某些查询场景需要好几个昂贵的表连接,增加了复杂性。在这种存储中,业务数据与外键元数据混杂起来,增加了开发和维护的成本。第二类采用键值或文档型的NoSQL数据库,键值型如Redis、DynanoDB 等、文档数据库如MongoDB,这些NoSQL都难以表示关联关系,为技术人员带来了开发成本和理解上的壁垒。

因此,专门用于图的存储和查询技术是非常必要的。图技术根据应用方式的不同可以分为两个方向,第一个方向是图数据库,它用于图数据的存储和联机事务查询,具备实时性,面向OLTP,支持CRUD和事务。第二个方向是图计算引擎,它用于图数据的离线查询分析,更适合海量数据的挖掘,面向OLAP。

图领域已经有很多的技术和产品,下图截取自VLDB2019 keynote《Graph Processing: APanaromic View and Some Open Problems》,除了其中所列之外还有很多其他的技术。


图数据库有很多成熟的产品,根据底层存储和处理引擎是否原生,图数据库可以分为四类。为了便于后面理解图数据库处理图的优势,我们解释一下这两个分类维度的含义。

存储方式

  • 原生图存储:数据存储模式为存储和管理图而设计,为图进行过优化。

  • 非原生图存储:将图数据序列化,采用关系型数据库、面向对象数据库、或是其他通用数据存储。

处理方式

  • 原生图处理:使用免索引邻接,关联节点在物理层面指向彼此,这种方式不同于传统关系型数据库的树形全局索引,为查询图的关联节点带来了巨大的性能优势。

  • 非原生图处理:不采用免索引邻接保存关系。

根据这两个维度,图数据库产品可以分为四类:

Neo4j实践

我们以Neo4j为例,直观地感受一下图数据库的强大和便捷之处。Neo4j采用Cypher查询语言(CQL)进行数据的增删改查,下面的Cypher语句创建了三个Person节点和他们之间的关注关系:

CREATE (Billy:Person {name:'Billy',born:1990, sex:'male'})CREATE (Ruth:Person {name:'Ruth',born:1989, sex:'female'})CREATE (Harry:Person {name:'Harry',born:1992, sex:'male'})CREATE (Billy)-[:FOLLOWS]->(Harry)CREATE (Harry)-[:FOLLOWS]->(Billy)CREATE (Ruth)-[:FOLLOWS]->(Billy)CREATE (Ruth)-[:FOLLOWS]->(Harry)CREATE (Harry)-[:FOLLOWS]->(Ruth)

查询关注了Billy的人:

MATCH (Billy:Person{name:'Billy'})<-[:FOLLOWS]-(followers:Person)RETURN followers

为Billy做个简单的好友推荐,推荐策略是把Billy好友(互关者)关注的人推荐给他:

MATCH(Billy:Person{name:'Billy'})-[:FOLLOWS]->(friend:Person)-[:FOLLOWS]->(Billy:Person{name:'Billy'}),(friend)-[:FOLLOWS]->(newFriend)WHERE NOT(Billy)-[:FOLLOWS]->(newFriend)RETURN newFriend

上面的推荐查询得到Ruth。

可以看到,相较SQL的关联查询,Cypher查询的语法具有更强的语义性。

Neo4j也提供了shortestPath方法来获取节点间的最短路径关系,下面这个查询基于Neo4j官方提供的电影和演员数据:

我们的历史数据大多都存储在关系型数据库中,neo4j也很好的支持了关系型数据表CSV文件的导入,CSV文件的导入有两种方式:

1.直接用Cypher LOACCSV:

LOAD CSV WITH HEADERS FROM"file:///categories.csv" AS rowCREATE (n:Category)SET n = row

2.用neo4j-import工具,更适用于数据量较大的场景,支持并行、可扩展的CSV数据导入。 

在查询性能优化方面,Neo4j也做了较好的支持:

  1. Cypher支持对节点的某个属性上创建索引,使得检索数据效率更高,但是跟关系型数据库类似,索引同样会增加存储成本、影响写入效率。

  2. 在用Cypher查询时,我们也可以通过EXPLAIN或PROFILE对查询语句进行分析,辅助查询调优。

  3. Neo4j监控工具可以记录和显示服务器的各项指标,Neo4j提供了HTTP web界面实时查看监控数据,包括存储容量、ID分配、页面缓存和事务数据。

 

Neo4j系统建设

Neo4j开发

Neo4j分别提供Java接口和REST API,对应的,使用Neo4j也有两种开发模式:Java API嵌入式开发和HTTP API调用开发。

Neo4j天然支持Java,Spring也提供了Spring Data Neo4j,便于我们在Spring应用系统中使用Neo4j。Spring Data Neo4j除了提供Spring Data模块的实体映射、分页、事务等功能以外,还针对Neo4j提供了以下附加功能:

  1. 支持Neo4j属性图模块;

  2. 支持Neo4j Lucence索引;

  3. 支持Neo4j Cypher查询(CQL);

  4. Neo4jTemplate

 Spring Data Neo4j体系结构如下图:

Spring Data Neo4j提供了不同的API来支持不同的场景,下表给出了对应的Java类和其用法:

Spring Data Neo4j类

用法

GraphRepository

用于执行basic Neo4j DB操作

GraphTemplate

类似其他Spring Data模块的Template,是执行Neo4j DB操作的Spring模板

CrudRepository

用于使用Cypher查询语言(CQL)执行Neo4j CRUD操作

PaginationAndSortingRepository

用于执行Neo4j CQL查询结果的分页和排序

 

Neo4j集群搭建

 

考虑到系统实施时大规模生产环境和容错问题,Neo4j企业版提供高可用集群和因果集群两种集群功能,实现高可用性和水平读扩展,有效提高系统整体性能、可靠性、灵活性和可扩展性。

在使用图数据库集群时,我们需要考虑集群的负载均衡,提升吞吐量并减少延迟时间。Neo4j自身没有负载均衡功能,需要依赖网络基础设施的负载均衡能力。以下是三种我们常用的负载均衡方式:

1.分离读写流量,将绝大部分写入操作直接在集群主节点上进行,将读请求和写请求完全分离开,通过负载均衡器将写流量定向到主节点,读流量平衡地分散到整个集群,避免写操作影响查询效率。

2.高速缓存分片,这种方式利用了主存储器中的数据查询执行最快,如下图所示,高可用集群中的节点实例将图的部分数据放在自己的主存储器,负载均衡器将请求路由到对应的节点实例上,提升查询效率。

3.集群实例节点读取自己的写入,减少查询开销。

 

知识图谱与图数据库

图数据库虽然强大且易用,但是它并不是完美的适用于所有场景。图数据库可以存储海量数据,但并不适合直接用来进行海量数据的分析计算,而更适合用来进行某个实体及其关联关系的查询。因此,仅靠图数据库显然无法解决图计算领域的所有问题,在知识图谱的构建和应用方面还有很多需要利用其他图计算技术来解决的问题。

下图是一个典型的图计算技术架构,包括图数据建模、存储系统和图数据计算三个部分。

  • 图数据建模:对于关系型数据库的数据,关系和实体已知,建模成图数据相对简单。但是对于文本这样的非结构化数据,将其建模成为图数据需要应用自然语言处理、机器学习技术,来解决知识抽取、知识融合和知识推理等问题。斯坦福大学Infolab实验室开源的DeepDive提供了知识抽取的框架,是构建知识图谱的利器。 

  • 存储系统:图数据有多种存储方式,图数据库当然是最适应图的关系存储的,但在不同的应用场景下,也可以考虑将图数据以RDF三元组、关系型数据库、ES或其他NoSQL方式进行存储。

  • 图数据应用:在构建好的图数据基础之上,通过图计算引擎对海量图数据进行离线的计算分析,针对不同的应用场景,也可以在内存处理或工作存储中对图数据进行查询分析。

图数据库非常适用于图数据的存储和实时查询,是知识图谱的基石,但它并非知识图谱的全部。在应用时,我们需要针对具体的场景去进行选型,结合不同的图计算技术进行分析计算。 

目前图数据库产品很多,国内各大互联网公司如阿里、腾讯等也自研了自己的图数据库,图数据库未来能否像关系型数据库一样有统一的查询语法,目前还是一个未知数。但可预见的是,随着数据的爆炸式增长,在追求数据驱动运营和决策的潮流下,图数据库在社交关系、实时推荐、主数据管理、在线反欺诈、IT网络管理、地理信息系统等领域都将占据重要的一席之地。

 

更多阅读推荐

  • 云原生应用Go语言:你还在考虑的时候,别人已经应用实践

  • 一文告诉你雾计算与云计算的区别及对物联网的价值!

  • 你可能也会掉进这个简单的 String 的坑

  • 教你如何用 Python 三行代码做动图!

  • Ethereum2.0:深入了解Lego Money、Sharding、PoS和TPS的真相

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云机器学习PAI DSW 2.0 Alink商业版重磅发布

DSW 2.0&#xff1a;面向AI研发的集成开发平台 DSW&#xff08;Data Science Workshop&#xff09;是阿里巴巴PAI团队根据多年的AI算法和产品研发经验积累&#xff0c;围绕提高AI算法研发效率&#xff0c;降低研发成本而推出的一款适用于各类AI开发者的云端机器学习集成开发环…

DSW:面向AI研发的集成开发平台

发布会传送门 产品详情 云原生技术&#xff0c;注重用户体验&#xff0c;提升研发效率 环境搭建是算法研发过程中的重要一环&#xff0c;这里除了硬件选型外&#xff0c;软件环境的安装配置&#xff0c;后续升级往往会耗费不少时间。DSW借助阿里云ECS&#xff0c;Docker和Ku…

程序员应如何理解高并发中的协程

来源 | 码农的荒岛求生责编 | 晋兆雨头图 | 付费下载于视觉中国作为程序员&#xff0c;想必你多多少少听过协程这个词&#xff0c;这项技术近年来越来越多的出现在程序员的视野当中&#xff0c;尤其高性能高并发领域。当你的同学、同事提到协程时如果你的大脑一片空白&#xff…

5G边缘计算行业通识:阿里云ENS技术演进之路

近日&#xff0c;阿里云杨敬宇在CSDN阿里云核心技术竞争力在线峰会上进行了《5G基础设施-阿里云边缘计算的技术演进之路》主题演讲&#xff0c;针对5G时代下&#xff0c;行业和技术的趋势、边缘计算产业通识以及阿里云边缘计算从过去到未来的技术演进之路进行分享。 5GAI需求推…

精讲23种设计模式-策略模式~聚合短信服务和聚合支付服务

文章目录一、设计模式1. 为什么需要使用设计模式2. 设计模式的分类3. 什么是策略模式4. 为什么叫做策略模式5. 策略模式优缺点6. 策略模式应用场景7. Spring框架中使用的策略模式二、策略模式~聚合短信服务2.1. 依赖引入2.2. 抽象公共行为接口2.3. 具体策略接口实现类2.4. 策略…

引领开源新风潮,阿里巴巴编程之夏第二期重磅来袭!

“唯有热爱&#xff0c;可抵岁月漫长”。 2020 年 5 月 25 日&#xff0c;阿里巴巴编程之夏&#xff08;Alibaba Summer of Code&#xff0c;以下简称 ASoC &#xff09;第二期正式上线&#xff0c;项目规模再度升级&#xff0c;来自开源社区的 Apache Dubbo、Apache RocketMQ…

powerdesigner逆向工程(sql转pdm)

第一步&#xff1a; File -> Reverse Engineer -> Database 第二步 &#xff1a; Using Script Files -> Add Files

安谋中国发布“玲珑”i3i5 ISP处理器,剑指何方?

随着图像视频处理技术的发展和 5G 时代的来临&#xff0c;除了社交等平台外&#xff0c;以图像、视频为载体的内容渗透到各领域&#xff0c;特别是智能安防、AIoT、智能汽车等新兴领域应用。与此同时&#xff0c;人们对其清晰度、图像分辨率有新的扩展需求&#xff0c;对摄像头…

凯度信息之美奖揭晓,数据可视化后有多“性感”?

前言&#xff1a;更多关于数智化转型、数据中台内容可扫码加群一起探讨 阿里云数据中台官网 https://dp.alibaba.com/index &#xff08;作者&#xff1a;常成&#xff09; 2019年的“凯度信息之美奖”揭晓了&#xff0c;有很多很有意思的信息可视化作品。很多作品看到的时候…

精讲23种设计模式-基于责任链模式~构建企业级风控系统

文章目录一、责任链1. 责任链基本概念2. 定义3. 关键要点4. 责任链模式优缺点5. 责任链模式类结构图6. 网关权限控制责任链模式二、构建企业级风控系统2.1. 定义公共抽象任务2.2. (失信名单)校验处理类2.3. (信用卡)逾期处理类2.4. (蚂蚁信用积分)处理类2.5. 责任链工厂(第一种…

抓取了《大秦赋》所有数据,我发现了这些秘密

本文由黄勇老师特约供稿学习人数超13万人的<Python入门到实战一卡通>作者网易、360、华为特约Python讲师前言最近大火的电视剧《大秦赋》&#xff0c;给朋友圈的小伙伴都拉回到那个风云激荡的春秋战国时期&#xff0c;大家都在热情的讨论着大秦一统&#xff0c;秦始皇嬴政…

精讲23种设计模式-基于观察者模式~设计异步多渠道群发框架

文章目录一、观察者模式1. 观察者模式基本概念2. 观察者模式的应用场景3. 观察者模式的类图二、设计异步多渠道群发框架2.1. 定义消息观察者抽象接口2.2. 创建观察者2.3. 主题通知所有观察者2.4. 观察者注册2.5. 自定义线程池2.6. 签单通知入口2.6. 异步通知接口测试2.7. 依赖三…

君子动手不动口,阿里云喊你做云上体验官啦!

想要免费搭建云上博客&#xff1f;想要玩转全云端开发&#xff1f;想要挑战AI经典命题&#xff1f;想要7天进阶成为云计算专家&#xff1f;想要初始化你的云原生工程&#xff1f;快来阿里云 Hands-on Labs&#xff01; Hands-on Labs 是阿里云全新推出的云上动手实验室&#x…

我是Redis,MySQL大哥被我害惨了!

来源 | 编程技术宇宙责编 | 晋兆雨头图 | 付费下载于视觉中国我是Redis你好&#xff0c;我是Redis&#xff0c;一个叫Antirez的男人把我带到了这个世界上。说起我的诞生&#xff0c;跟关系数据库MySQL还挺有渊源的。在我还没来到这个世界上的时候&#xff0c;MySQL过的很辛苦&a…

联手友盟+打造云上数据增长“样板间”, 好兔视频成功逆势突围

前言&#xff1a;更多关于数智化转型、数据中台内容可扫码加群一起探讨 阿里云数据中台官网 https://dp.alibaba.com/index &#xff08;作者&#xff1a;友盟&#xff09; “消费升级”是近年来的中国消费市场热门词汇&#xff0c;消费升级的同时也驱动了内容消费升级。在这样…

SpringBoot 使用 Caffeine 本地缓存

文章目录一、本地缓存介绍二、缓存组件 Caffeine 介绍2.1. Caffeine 性能2.2. Caffeine 配置说明2.3. 软引用与弱引用三、SpringBoot 集成 Caffeine 方式一3.1. Maven 引入相关依赖3.2. 配置缓存配置类3.3. 定义实体对象3.4. 定义服务接口类3.5. 定义服务接口实现类3.6. Caffei…

《Istio 从懵圈到熟练:二分之一活的微服务》

作者 | 声东 阿里云售后技术专家 <关注阿里巴巴云原生公众号&#xff0c;回复 排查 即可下载电子书> 《深入浅出 Kubernetes》一书共汇集 12 篇技术文章&#xff0c;帮助你一次搞懂 6 个核心原理&#xff0c;吃透基础理论&#xff0c;一次学会 6 个典型问题的华丽操作…

为了追求更快,CPU、内存、I/O都做了哪些努力?

来源 | 编程技术宇宙责编 | 晋兆雨头图 | 付费下载于视觉中国背景曾经&#xff0c;我面试的时候有两个最怕的。一怕问算法&#xff0c;二怕问高并发。算法这个&#xff0c;自从刷了不少LeetCode&#xff0c;发现还是有套路可循的&#xff0c;虽不敢说算法能力有多强&#xff0c…

神结合!一招玩转K8s和微服务治理

发布会传送门 进入直播间还有好礼等你拿&#xff01; EDAS产品免费试用&#xff1a;https://www.aliyun.com/activity/middleware/edaspromotiononmay 首届云原生编程挑战赛正式开战&#xff01;立即报名瓜分330000现金奖&#xff1a;https://tianchi.aliyun.com/specials/p…