通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

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

neo4j是native graph database,也就是有自己的数据库存储。它的长处在于支持交互式查询,属于oltp系统,很多人说不支持分片存储使其无法应付海量数据,本人觉得恰恰相反,可以说neo4j的存储方式是教科书式的以空间换时间。

一、图数据库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里面第二名以后的一众数据库里挑选。进一步,如果你的需求不只停留在查询,还要依据查询结果计算出一些图的特征来,那么建议你将图数据库系统同图计算系统联合使用。

延伸阅读:

二、图数据库优点有什么

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