图数据库知识点3:图数据库解决了什么问题?

news2025/2/3 8:52:03

在前面的两个知识点中我们先后介绍了:

  • 知识点1:图数据库与关系型数据库的区别

  • 知识点2:图思维方式

现在,我们可以更进一步来通过具体的例子来了解图数据库、图计算到底解决了什么问题。我们先来剖析下面这个问题:

图数据库查询(计算)和传统的关系型查询、大数据分析有什么不同?

假设我们有200个顶点,平均每个顶点有50条边与其它顶点产生关联,全图有10,000条边、200个顶点。

如果我们去计算从图中任一个顶点出发抵达另外任意一个顶点的最短路径,理论上在这个高度联通的图上计算最短路径或最大K邻的计算复杂度(\frac{|E|}{|V|})^K,其中E为边的数量,V为顶点数量,K为两个顶点间最短路径的长度(或下钻的深度)。如果最短路径为4步,即K=4,那么该查询的计算复杂度约为50的4次方(约6,250,000)。

如果这张图等比放大1,000倍(10,000,000边,200,000顶点),同样的查询的计算复杂度并没有等比增加!因为从扩增1,000倍后的大图中的某一个顶点出发,它的每一层的可遇见的邻居依然是平均只有50个,而|E/V|因为保持了一个相对恒定的比例,以上两点决定了在大图中的最短路径计算(也包含很多其它类型的查询或计算)复杂度并没有增长1,000倍,或许只增加了不到1倍或数倍——这就是图数据库的特点(这个时候跨越多实例的水平分片分布式系统查询的效率会显著低于集中式查询,两种架构的面对这类查询的性能差异至少在100倍以上,查的越深,落差越大!)。

面向图数据的关联计算与查询的复杂度并不与全局的数据量成正比,而与具体的数据集的拓扑结构、查询逻辑、查询模式相关。

换言之,在数据量增加千倍的前提下,存储的需求显然会等比增加,但是计算的需求(复杂度)并不需要等比增加,因为图查询的复杂度与逻辑并没有随着数据量增加而产生等比变化——我们依然是在局部进行数据遍历!因此,用固有的大数据的思维去套图数据库的计算逻辑很可能会产生南辕北辙的效果——也就是说图数据库所面临的挑战是计算优先而不再是存储优先——这句话也可以翻译为:用做关系型数据库、数仓、数湖的思维去设计与实现图数据库一定会失败。但是失败的原因不一而足,或许我们需要明确的列出图数据库解决的问题有哪些。

图数据库解决的问题有哪些?(What problems does Graph solve?)

  1. 灵活建模、高维建模

  2. 关联计算、深度下钻、归因分析

  3. 白盒化、可解释性

俗话说,话越少事儿越多。要想对上面3点有个透彻的理解,我们或许应更多的思考图数据库解决了传统的数据库或大数据框架的哪些问题……

图数据库的设计有哪些坑?(The Caveats of Graph DBMS)

1.图数据库的高维性意味着它的挑战不仅仅是存储,更包括计算! 在所有类型的数据库中,图数据库是唯一的一个计算与存储同为一等公民的数据库,而在关系型数据库、NoSQL数据库中,计算(引擎)只是附着于存储(引擎)的二等公民!计算优先意味着计算与存储分离的模式注定无法实现高效的图计算、查询与分析——这也是图数据库和过往的关系型数据库、大数据分析框架的主要区别之所在。

2.分布式不是试图用多台低配的设备来取代高配的设备,并寄希望于可以获得更好的效果。毕竟(高性能的)图数据库系统不是用Hadoop的理念与框架可以实现的——如果你还停留在Hadoop时代,那么你的知识栈与认知需要一次很好地升级了。分布式系统设计的最重要理念就是审慎的决策哪些图计算的场景需要分片,哪些不需要分片,换而言之分片可以解决的场景是偏浅层的查询与计算,而深度的计算的挑战与分片反向而行。实际上在图数据库上构建分布式系统一直是个谜,很少有人想得清楚、讲得明白、做得出来。

我们在这里做个简单的梳理,关于分布式的几种模式:A. 分布式共识集群的单集群扩展模式:通过容器及License最大并发资源分配或底层硬件升级来实现;B. 分图扩展模式(即Fabric模式):多个小集群通过Nameserver来调度;C. 分片扩展模式(即Sharding/Federation模式):无限水平可扩展(图仓模式)。 事实上,最早的分布式计算系统还包含主备模式等,但为了简化讨论,我们只列举了三类分布式架构——关于这几种模式的效率讨论,请移步下文( 后续的知识点中也会展开论述)。

3.计算机体系架构发展到今天,每一个单机、单实例的系统在底层都是一整套可以支持高并发、规模化并发的系统。这个时候,决定系统能力的是其上层的软件!高并发的硬件并不等于软件天然地做到了高并发!比如某款知名的图数据库并不支持高并发,每个查询经常需要串行的遍历数据集,其效率之低下,可想而知。关于这一点一个简单的问题可以帮助读者自查——1台32核CPU的服务器的计算能力与32台每台1核CPU的服务器相比,哪个的计算能力更强?对这个问题有兴趣的读者可以参考这篇论文。Scalability! But at what COST?

(相信很多喜欢讲好分布式故事的人都会非常难堪)。

在Twitter-2010数据集(15亿点、边)运算20次迭代的PageRank算法的时效性排名,横轴为时间,单位秒。
PageRank与LPA算法的Twitter 15亿点边的数据集上的执行效率,可以看到Ultipa的性能是其它厂家~10倍以上,空白表示无法完成运算并返回结果或宕机。

 

4.数据结构的特征、效率决定了数据库系统的最终效率,或者说是系统的效率的上限。只有在边界条件下才能看到一个系统真正的能力边界,对于图系统而言,判断它的能力边界有很多条路径,略举几个例子:A. 数据加载,不要只看本地加载,还要看线上、远程加载大量数据的能力——因为这样显然更能模拟真实的企业生产系统环境;B. 数据更新,需要检验一套图系统的逐条数据更新、批量数据更新(例如每天),全量数据更新的能力;C. 数据查询与计算的能力:在性能评测和POC时最容易遇到的就是数据&查询结果造假的问题,有些厂家会用预先计算并缓存结果的方式作弊。这个时候,可以要求实时更近数据集,并立刻查询并比较更新前后的查询结果变化——如果没有变化,就是作弊或者系统没有能力进行实时更新与实时查询;D. 算法支持能力:图算法是任何一款图数据库中很重要的能力,不仅要看支持的算法的数量的多少,还要看具体的每个算法的调用方式、调参方式、返回方式是否灵活多样,是否支持可视化、同步异步返回等调用模式,以及算法结果的准确性!E. 工具链条:DBA、开发人员,甚至业务人员可以使用的工具的丰富程度与具体的使用感受是一个(图)数据库是否趋于成熟的典型标志——通常身经百战的数据库的工具链条都会比较完整,也更容易在上面做二次开发。F. 准确性校验:这一条是很多厂家与客户都会忽略的地方。因为图的高维性,很多查询的结果校验经常被忽略。但是通过良好的可视化-表单化查询工具、交互式帮助文档是可以赋能用户快速的对任何查询或算法的结果进行校验,这一点至关重要。

5.编程语言是有效率之分的。如果到今天还有人说用Python可以写出比C/C++高效很多的软件,那么反之亦然,并且概率高得多。关于编程语言效率的讨论,显然我们不会落入PHP是世界上最好的编程语言的怪圈,不过对Python或任何高级语言痴迷的读者(以及各种AI系统)应该多读一些硬核技术的书籍与文章。随着各类大数据框架的兴起,相当数量的应用系统是用Java实现的,它最大的问题是GC和低效性,作为一款企业级图数据库而言,它显然不是个足够强劲的编程语言。类似的,有的图系统用Go与Rust为核心语言实现,单纯的从极致性能上看,两者都无法超越C或C++(假设编程能力相当的条件下,越贴近硬件的语言越快)。

越高级的语言的数据处理效率越低,这本来是常识的废话……

 不过,关于编程语言的探讨点到为止,有兴趣和能力的读者可以做一些充分的性能评测来感受一下效率差异之巨大。想了解具体技术原理的朋友可以参考Ultipa分享出来的这篇文章。

高密度并行图计算(HDPC)

 6.(图)数据库系统的开发需要对操作系统、文件系统、存储、计算、网络等诸多组件的深入理解,并且需要很多工程上的调优。如果是一群学院派的老师和学生搭出来的“图数据库”,大家可以想想在面对真实工业界场景时的尴尬情景;亦或是一群搞网络水军和商务造假的人攒出来的东西能有多Robust?学界理论结合日常工程实践是非常必要的。举两个简单的例子: A. 过去200多年中图论研究的数学模型都以简单图(simple graph)为主,极少涉及到像工业界中常见的多边图(multi-graph,又称为复杂度)——这就导致了那些学院派背景浓厚的数据库或图计算机系统厂家在构建核心数据结构时并没有考虑过高效地支撑多边图;B. 关于图算法的学术界论文有上千篇,但是绝大多数都是在极为微小的数据集上进行测算,例如几十个到最大万级的点、边的小图上面,但是工业界的数据量动辄是百万级起——这意味着照搬学术界的算法源码的算法执行耗时会极长,而真正实现加速需要对底层架构与代码工程上做大量的重构、调整、优化。

7.图数据库区别于传统数据库的特点有很多,最重要的是高维性,设计和使用图数据库要有图思维方式。有些工程师认为SQL+数仓可以解决一切问题——感性的说是的,但是代价如果考虑进来,SQL的最大敌人是自身的低维性导致其数据建模不够灵活、关联查询效率差、 复杂代码的黑盒不可解释性。这些问题都是图数据库的时代所直面的。

关系型数据建模受限于二维表、多表关联查询模式可能产生的笛卡尔积效应等是SQL面临的主要问题。

下面这张图是比较了典型的开源关系型数据库MySQL与某图数据库之间的随着查询深度逐步增加时两者间的时耗差异。不难看出,在浅层(<2)层查询时两者并不存在差异,但是从两层开始两者的差异从16倍到1080倍25000倍直至MySQL完全无法返回。从绝对时耗曲线上看图数据库的曲线几乎是平坦的——本质上,性能优化过的图数据库的(深度下钻时)的查询复杂度并不是指数级或“笛卡尔”乘积的方式上升,而是可以做到以一种近邻无索引+动态剪枝过滤的方式完成查询,其查询的时间复杂度(算法复杂度)要指数级低于关系型数据库,因此效率也会指数级高于关系型查询模式。

另一方面,数仓与大数据框架中所崇尚的的数据分层模式、中间表、临时表以及宽表模式,虽然能在很多业务场景中解决掉问题,但是代价是灵活性差,任何业务的需求变动都会导致系统与表结构(字段)的变化,无法高效、实时、灵活地应对需求变化。本质上,用二维表来试图解决真实世界的业务需求,肯定是事倍而功半的效果,耗时、耗力、浪费资源不环保。这也是为什么SQL一定会被GQL取代的深层次原因。 

随着查询深度增加,图数据库相比关系型数据库的查询效率落差逐级增大

 

40年数据处理技术发展趋势:从关系型到大数据到图数据

 

最后,我们或许可以用一段话来总结:过去40年数据处理技术发展趋势就是从关系型到大数据到图数据(深数据)。不但数据量在不可逆的变大,查询的深度(关联复杂度)也在随之增加,而已经有近半个世纪的SQL终将逐步消亡。这一趋势随着GQL标准在2023年的出炉,会加速SQL系统与负载向GQL的迁移。其中相当大量的业务场景会迁移到图数据库之上——这种迁移从实操成本上考量,一定是先迁移创新型的增量场景,然后才会逐步下沉并迁移已有场景。

烦请大家记住图数据库的3大特点:白盒、高效、灵活。

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

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

相关文章

【Vue实用功能】elementUI 自定义表单模板组件

elementUI 实现一个自定义的表单模板组件 注&#xff1a;该功能基于elementUI 背景&#xff1a;在项目开发中&#xff0c;我们会遇到这种需求&#xff0c;在管理后台添加自定义表单&#xff0c;在指定的页面使用定义好的表单 直接上代码&#xff1a; <template><di…

DBCO-PEG-NHS, 可溶于水,有多种分子量供选择

凯新生物DBCO-PEG-NHS衍生物可以点击化学反应不需要任何金属催化剂。反应促进1,3-偶极环加成反应&#xff0c;环辛炔和叠氮化合物&#xff0c;也被称为铜自由点击反应&#xff0c;是一种生物正交反应使溶液中的两个分子的共轭。DBCO PEG衍生物具有缓冲溶液中快速的动力学和稳定…

C语言基础【程序=算法+数据结构】——(数据结构——基础篇)

欢迎小伙伴的点评✨✨ 本篇章系列是对C语言的深度思考和总结、关于C语言内容会持续更新。 文章目录✨前言✨数据的表现形式✨数据类型一、基本类型1.1、整型类型1.1.1、基本整型(int)1.1.2、短整型(short int)1.1.3、长整型(long int)1.1.4、*双长整型(long long int)1.1.5、字…

1556:Dis——Tarjan求LCA、倍增求LCA

【题目描述】 给出 n 个点的一棵树&#xff0c;多次询问两点之间的最短距离。 注意&#xff1a;边是双向的。 【输入】 第一行为两个整数 n 和 m。n 表示点数&#xff0c;m 表示询问次数&#xff1b; 下来 n−1 行&#xff0c;每行三个整数 x,y,k&#xff0c;表示点 x 和点 …

英文计算机论文写作,需要注意哪些细节? - 易智编译EaseEditing

&#xff08;1&#xff09;尽量用动词少用名词化 那些大篇名词的文章真的很难读懂&#xff0c;而有强大动词的句子更容易理解。 我们注意到客户在论文中经常使用的名词有“agreement”, “disagreement”, “investigation”, “analysis”, “examination”, “comparison”…

Qt 中的多项目管理

背景&#xff1a; 在Visual Studio中使用 “Solution” 来组织多个 Projects。 在Qt中&#xff0c;使用 "Subdirs Project"来组成多个projects &#xff0c;实现VS中的Solution功能。 项目类型 首先是先新建一个子目录项目&#xff0c;再根据需要在子目录项目中添…

漏洞深度分析|CVE-2022-1471 SnakeYaml 命令执行漏洞

项目介绍 YAML是一种数据序列化格式&#xff0c;设计用于人类的可读性和与脚本语言的交互。 SnakeYaml是一个完整的YAML1.1规范Processor&#xff0c;支持UTF-8/UTF-16&#xff0c;支持Java对象的序列化/反序列化&#xff0c;支持所有YAML定义的类型。 项目地址 https://gi…

javaee之MyBatis框架3

mybatis中编写dao实现类的使用方式 简单说一下实现原理&#xff1a; 下面来说一下UserDaoImpl的实现原理 mybatis主配置文件中properties标签的使用 第一种&#xff1a; <property name"driver" value"com.mysql.jdbc.Driver"></property> &…

软件加密保护:Mirage License Protector v5 注册版

Mirage License Protector v5.1.0 适用于许多编译器 License Protector 是一个 DLL / COM exe&#xff0c;几乎可以与 所有编译器一起使用&#xff1a;C、C#、.NET、Delphi、VB6 和 VB.NET&#xff0c; 32 位和 64 位的 Java 哪种产品适合我&#xff1f; 选择许可证保护器 应…

智能无障碍轮椅——PID算法控制

文章目录一、PID算法二、控制方法对比棒棒控制&#xff08;启停控制器&#xff09;比例控制PI控制PID控制三、PID的手动整定四、PID衰减曲线整定五、PID调节器各校正环节的作用是&#xff1a;六、PID算法的一般表达式是&#xff1a;七、计算注意事项一、PID算法 PID控制是最早…

图像语义分割网络FCN(32s、16s、8s)原理及MindSpore实现

一、FCN网络结构 全卷积网络(Fully Convolutional Networks)&#xff0c;是较早用于图像语义分割的神经网络。根据名称可知&#xff0c;FCN主要网络结构全部由卷积层组成&#xff0c;在图像领域&#xff0c;卷积是一种非常好的特征提取方式。本质上&#xff0c;图像分割是一个分…

DBCO-PEG-NH2/Amine二苯基环辛炔-聚乙二醇-氨基 简介。用于以高特异性和反应性标记叠氮化物修饰的生物分子。

中文名称&#xff1a; 二苯基环辛炔-聚乙二醇-氨基 氨基-聚乙二醇-二苯基环辛炔 英文简称&#xff1a; DBCO-PEG-NH2/Amine Amine/H2N-PEG-DBCO 外观&#xff1a; 灰白色固体或半固体&#xff0c;取决于PEG的分子量 溶剂&#xff1a; 部分常规有机溶剂 存储…

day20-django

文件上传 批量上传数据 案例&#xff1a;混合数据(Form) 提交页面&#xff1a;用户输入数据文件&#xff08;输入不能为空&#xff0c;报错&#xff09; django开发过程中两个特殊的文件夹 static&#xff1a;存放静态文件的路径&#xff0c;包括css、js、项目图片 media&…

【问题记录】Git问题记录

文章目录问题1Failed to connect to github.com port 443 after 21085 ms: Timed outOpenSSL SSL_read: Connection问题2unable to access https://github.com//: OpenSSL SSL_read: Connection was reset, errno 10054网速慢问题clone太慢&#xff0c;pull太慢怎么办问题1 Fa…

记录C,C++关键字的位置,直接跳过注释和字符串文本。

依据第二版本&#xff0c;可以写一个跳过注释的查找函数 C_IndexOfWord Java_IndexOfWord CSharp_IndexOfWord 还有一种方法&#xff0c;可以先把所有注释用空格代替&#xff0c;查出的字符位置也不变。 以前版本&#xff1a; DList<TextColor> Syntax::GetTextColor…

m基于matlab的连续相位调制(CPM)解调系统仿真,包括解调,同步等模块

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着数字通信技术的飞速发展&#xff0c;数字通信的调制技术也得到了快速发展&#xff0c;其中连续相位调制(Continuous Phase Modulation&#xff0c;CPM)作为一种全新的通信调制方法得到了越来…

GNN 极简入门

文章目录图基本知识GNN简介GCNPYG极简入门Data Handling of GraphsCommon Benchmark DatasetsMini-batchesData TransformsLearning Methods on Graphs图基本知识 &#x1f638;图是由节点的有穷非空集合和节点之间边的集合组成&#xff0c;通常表示为 G(V,E)G(V, E)G(V,E)&am…

涨知识系列:爆款短视频拍摄技巧之一,构图

拍摄技巧主要分为两个部分&#xff0c;一个是构图&#xff0c;一个是拍摄手法。这部分内容其实也是比较简单的&#xff0c;因为短视频毕竟不需要做到像拍电影那么专业。所以在短视频当中我们只要学会一些基本的技巧就完全够用了。更重要的是我们需要对构图和拍摄手法有一个概念…

基于KT6368A的双模蓝牙模块打印机的方案

目录 一、打印机蓝牙模块简介 目前主流的打印机&#xff0c;很多都还是不带蓝牙。大部分的受限于成本等等原因&#xff0c;都还是通过USB的方式和电脑进行通讯&#xff0c;从而完成打印的数据交互 因为早期蓝牙技术发展的比较缓慢&#xff0c;而打印机类型的产品&#xff0c;…

_12LeetCode代码随想录算法训练营第十二天-C++二叉树

_12LeetCode代码随想录算法训练营第十二天-C二叉树 二叉树基础知识 二叉树的种类 满二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 完全二叉树 完全二叉树的定义如下…