当前位置: 首页 > news >正文

什么是图数据库?图数据库实践与创新浅析

42126f71c448b74dda2d38686bcc1b64.gif

a6b71bc8f49d66f56d0352bbe40cddcd.png

近日,中国工程院院士,清华大学计算机科学与技术系教授郑纬民先生,在人民日报发表文章《把握图数据库自主创新机遇》,建议国内科研学者和工程人员,要在图数据库的理论研究与工程研发上坚持自主创新道路,确保技术的引领性和产品的竞争力,从而实现图数据库从技术到产业的全面突破性发展。

什么是图数据库?

图数据库是一种使用图结构进行存储和查询的数据库,其中结点和边用于对数据进行表示和存储。在图数据库中,数据项结点通过边相互集合关联,代表了结点与结点之间的关系。这些关系允许将数据库中存储的数据连接到一起。在图数据库以及其他种类的数据库中,往往使用查询语言对数据库中的信息进行操作。

查询语言通常至少包括两个子集:数据定义语言和数据操作语言。其中,数据定义语言用于对数据库中的项目进行创建、修改和删除;数据操作语言用于查询和更新数据表中的数据。对每个子集的功能加以整合,就得到了查询语言的整体功能。根据查询语言的功能可知,数据查询语言可以用于在存储了知识图谱的图数据库中检索需要的信息,即完成对知识的检索。

图数据库强调数据之间的关联关系,它将数据间的联系视为和数据本身同等重要。基于图的数据建模方式具有天然的可扩展性,使得图数据库不需要一个预先定义好的数据模型,便可以便捷地实现数据存储。

数据互联、知识互联、万物互联已经成为当今世界的三大趋势,图数据库的出现便是顺应这种潮流。传统的关系型数据库在处理关系操作时,需要通过表连接(JOIN)实现,在实时查询的环境下,代价较高。图数据库则直接将关系和数据在物理层面上一并存储下来,使得访问数据结点和关系的操作能够以线性时间复杂度完成,甚至能够在一秒内遍历百万级的关系边。

下图是截至 2021年,数据库趋势网站 DB-ENGINES统计的各类别数据库热度趋势时间轴。可以发现:自2014年开始,大家对图数据库的关注度已远超同期其他类型的数据库。

101a98676dfd82c4881e1a109b5b43d9.png

图:不同类型数据库趋势图

图数据库领域内部阵营的情况又是如何呢?统计数据同样来自 DB-ENGINES,如下图所示,Neo4j 长期稳居图数据库热度榜首。

ff8cc54ceb3a8701afdeff600068364a.png

图:图数据库趋势图

以Neo4j为例,它是一款热门的原生图数据库,由 Java 和 Scala 编写,于 2007 年发布。Neo4j 在存储级别实现了属性图模型,使用指针方式构建和遍历图数据,同时支持 ACID 事务。Neo4j 分为社区版本和商业版本,收费的商业版本包含备份、分布式、容灾等企业级服务支持。Neo4j 的一大优势是其自带的前端页面原生支持数据展示,同时也可以基于 Cypher 语句对数据进行插入和修改操作。

属性图模型(Property Graph Model)是 Neo4j 图数据库的基本数据模型,它基于结点、关系和属性存储数据。

结合下图,可以对属性图中的元素有一个更加直观的了解。一个属性图犹如一个画板,上面可以包含两种类型的元素对象,即结点和关系。直观来看,一个属性图是由若干个结点和若干关系组成的,而关系则将结点组织关联起来。再往下深入,一个结点上可以存储标签和属性,一个边关系上可以存储关系类型和属性。

47b1ead25943e3e84d3ac466ae4018ff.png

图:图模型的元素关系

在了解 Neo4j 的属性图模型后,我们举一个简单的例子:构建一个企业知识图谱。下图是一个简化版的企业间关系图,包含了所有的属性图要素,作为示例非常合适。

该示例中共有5个结点,4个关系。结点类型共有两种:企业和人物。关系类型也有两种:股东和供应商。同时,结点和关系上都可能存在若干属性。

fd7d779cbe5af31c4db19335ba5789b0.png

图:企业图谱示例

除了Neo4j,常见的图数据库还包括Microsoft Azure Cosmos DB、OrientDB、ArangoDB、Virtuoso、JanusGraph等。下图是对这些图数据库的简单对比。

51649c923df5ad825902ad62a5576b5e.png

图:图数据库对比

下图给出了截止2021年8月,DB-ENGINES中图数据库前二十位的排行榜。从图中可以看出:前十位的图数据库都不是由中国的科研机构和公司开发。这也是为什么郑纬民院士提出:国内的科研学者和企业研发人员,需要在图数据库领域走自出创新道路。

05be80138ef2b4c0faab9183f59a3877.png

RECOMMEND

推荐阅读

953fccde0ea55388f53ba19619ae21b0.png

《从零构建知识图谱》

331e0f691e6047284020b5c0ed0e3190.png

推荐理由:资深知识图谱专家撰写,OpenKG创始人王昊奋、美团知识图谱负责人张富峥力荐,技术、工具、方法和案例4个维度,配源码。

9131fddde9c2d0eaddfd91f0c18b5385.gif

9f3701e8b8175294885dc0c66208eaa7.png

扫码关注【华章计算机】视频号

每天来听华章哥讲书

6434c92a980c8f7db5675355ef2ba569.gif

更多精彩回顾

书讯 | 10月书讯(下) |  小长假我读这些新书

书讯 | 10月书讯(上) |  小长假我读这些新书

资讯 | 数字化转型的1个目标,3大领域,6大因素和9个环节

书单 | 送你一份入门前端学习路线图

干货 | 4个维度理解火爆的SaaS

收藏 | 终于有人把Scrapy爬虫框架讲明白了

上新 | 【新书速递】从技术小白到开发大牛,这本实验教程带你手把手全栈开发!

0e2d397a7524b7ffcc08ff500ed50e8d.gif

1ab8b931dfe56b2e54e5f822cfe623de.gif

点击阅读全文购买

相关文章:

  • 【第75期】《失控玩家》引发的思考:我们究竟离真正的人工智能有多远?
  • 一文搞懂Javascript函数式编程基础
  • Keras入门必读教程:手把手从安装到解决实际问题
  • Pyecharts绘制上下组合图、左右组合图、一轴多图,超经典!
  • SQL零基础入门必知必会!
  • Emoji 表情还能这样玩?
  • 计算机科班比其他专业有多少优势呢?
  • 【第76期】50条有趣的Python一行代码,建议收藏!
  • 关于微服务系统中数据一致性的总结
  • 手把手教你做用户画像:3种标签类型、8大系统模块
  • 【新书速递】流量运营教科书
  • 纪念 C语言之父 丹尼斯·里奇 逝世10周年:他发明了计算机世界的钢筋水泥!...
  • 索引为什么能提高查询性能....
  • 五位卷王 | 总结的十道 JVM 面试真题!(建议收藏)
  • 【新书速递】图解IT-用Python轻松设计控制系统
  • 【RocksDB】TransactionDB源码分析
  • 03Go 类型总结
  • JAVA多线程机制解析-volatilesynchronized
  • SpringBoot几种定时任务的实现方式
  • SQLServer之创建数据库快照
  • 诡异!React stopPropagation失灵
  • 微信小程序设置上一页数据
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (2020)Java后端开发----(面试题和笔试题)
  • (笔试题)合法字符串
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (一)Neo4j下载安装以及初次使用
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • ... 是什么 ?... 有什么用处?
  • .Mobi域名介绍
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 中创建支持集合初始化器的类型
  • .net6使用Sejil可视化日志
  • .Net语言中的StringBuilder:入门到精通
  • ??在JSP中,java和JavaScript如何交互?
  • @SentinelResource详解
  • [.net]官方水晶报表的使用以演示下载
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [Angular] 笔记 6:ngStyle
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [codeforces] 25E Test || hash
  • [Excel] vlookup函数
  • [Flex] PopUpButton系列 —— 控制弹出菜单的透明度、可用、可选择状态
  • [Latex] Riemann 问题中的激波,接触间断,膨胀波的 Tikz 绘图
  • [LeetCode周赛复盘] 第 310 场周赛20220911
  • [MicroPython]TPYBoard v102 CAN总线通信
  • [MT8766][Android12] 增加应用安装白名单或者黑名单
  • [QT]加快qt编译:设置默认多核编译qt
  • [Qt桌面开发]一个Qt简单界面的开发