全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

图数据库neo4j和spark下面的graphx有什么区别?

来源:千锋教育
发布人:xqq
2023-10-20

推荐

在线提问>>

一、图数据库neo4j和spark下面的graphx有什么区别

neo4j是native graph database,也就是有自己的数据库存储。它的长处在于支持交互式查询,属于oltp系统,很多人说不支持分片存储使其无法应付海量数据,本人觉得恰恰相反,可以说neo4j的存储方式是教科书式的以空间换时间,每台服务器配备ssd磁盘阵列虽然贵,但是可以大幅减少分片存储的带宽占用和通信时间开销,保证oltp的效率。

neo4j很容易上手,特有的cypher查询语言以画草图的方式查询和建模数据,很直观。适当构建查询计划的情况下,neo4j的查询效率很高,能够迅速从整网中找出符合特定模式的子网,供随后分析之用。

此外,neo4j实现了tinkerpop接口,tinkerpop是刚刚毕业的一个阿帕奇项目,有望建立图数据库的一套标准用户接口。同样实现tinkerpop的还有titan,orient等主流图数据库。

再来看graphX。

graphX是spark的系统组件,存储是基于spark rdd的,有节点和边两种rdd。熟悉spark的朋友对rdd该不会陌生,spark通过缓存rdd的操作节省了大量计算和io开支,因此spark特别适合对海量数据进行运算,此理同样适用于graphX。因此,graphX自设计之初就是奔着图计算的目标去的,属于olap系统,而非oltp系统。

graphX有丰富的函数库,能完成很多经典图算法,如pagerank、三角计数、社群发现、最短路径计算等等。此外,图存储和计算的方式不禁让人想到神经网络算法,如果将隐层用节点rdd表示,隐层之间的边用边rdd表示,运用graphX的计算优势搭建起一套多层神经网络的想法很美妙,这应该就是MLlab相应算法模块的工作原理。

因此跟graphx相关的概念集中在图计算,而非图存储和查询领域。所以经常浏览db-engines的朋友们不难发现,图数据库列表里就没有graphx这一项。在比较图存储和图查询性能时,比较集合多是neo4j、orientdb、titan、arangodb等图数据库系统。而比较图计算时,比较集合多是graphlab、giraph、graphX。

简言之,图数据库系统和图计算系统不是一回事:前者是为了存储完整数据,并根据需求从中查询数据子集供分析展示之用;后者的任务是拿到一个图结构的数据集,从中计算一些有用的东西。

如果你有随时增长的海量数据,希望以图的方式存储这些数据,从而能在需要时顺利挖出一个子图来,那就要借助于图数据库,此时如果你有充足的资金,neo4j是不二之选,否则就要从db-engines里面第二名以后的一众数据库里挑选。进一步,如果你的需求不只停留在查询,还要依据查询结果计算出一些图的特征来,那么建议你将图数据库系统同图计算系统联合使用。

延伸阅读:

二、图数据库优点有什么

使用图(或者网)的方式来表达现实世界的关系很直接、自然,易于建模。比如某人喜欢看某电影,就可以建立一条边连接这个人和这部电影,这条边就叫做“喜欢”边,同时这个人还可以有其它边,比如“朋友”边、“同学”边等,同样这个电影也可以有其它边,比如“导演”边、“主演”边等,这样就构建了自然的关系网。图数据库可以很高效的插入大量数据。图数据库面向的应用领域数据量可能都比较大,比如知识图谱、社交关系、风控关系等,总数据量级别一般在亿或十亿以上,有的甚至达到百亿边。mysql不做分表分库的情况下插入百万数据基本就慢到不行,图数据库基本能胜任亿级以上的数据,比如neo4j、titan(janus)、hugegraph等图数据库,持续插入十亿级的数据基本还能保持在一个较高的速度。图数据库可以很高效的查询关联数据。传统关系型数据库不擅长做关联查询,特别是多层关联(比如查我的好友的好友有哪些人),因为一般来说都需要做表连接,表连接是一个很昂贵的操作,涉及到大量的IO操作及内存消耗。图数据库对关联查询一般都进行针对性的优化,比如存储模型上、数据结构、查询算法等,防止局部数据的查询引发全部数据的读取。

相关文章

如果有子查询SQL语句的执行顺序是怎么样的?

制作大型软件一般选用什么类型的数据库以保护数据安全?

sql server2000导出CSV文件用EXCEL数据格式出错怎么处理?

oracle user_segments表的segment_name字段以BIN$开头的是什么?

MySQL日均10万数据永久保存实现高可用可以采用什么方案?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取