首页 > 数据库技术 > 详细

图数据库:

时间:2019-08-27 00:15:53      阅读:604      评论:0      收藏:0      [点我收藏+]

 

 

1.Overall Comparison

Name

Neo4j

JanusGraph

Giraph

1.Compute Framework

Yes

Yes

Yes

2.External Components Demand

Option

Yes

Yes

3.Algorithm Support

Official/Spark/ Mazerunner/ XData

Spark/Giraph/HDP/ XData

XData

4.HF Subgraph Mining

Yes (On Sparser Data)(Memory limit)

Yes

Yes

SparQL Support

Yes

No

No

Gremlin Support

Yes

Yes

No

Cypher Support

Yes

No

No

Relation Inference

Supported base on multi-thread single link query and thread d3-format result merge

 

 

2.Detail

2.1    Compute Framework

 

组件名

Neo4j

JanusGraph

Giraph

URL

https://neo4j.com/developer/apache-spark/

https://docs.janusgraph.org/latest/hadoop-tp3.html

https://zh.wikipedia.org/wiki/Giraph

计算框架概述

使用spark连接器,可以使用SparkSQL、Streaming、GraphX框架进行计算。

使用Mazerunner组件,允许将专用数据集(例如节点或关系列表)导出到Spark。

 

OLAP Traversals引擎可以选用Gremlin Graph Computer,默认安装Gephi、Giraph、TinkerGraph、Hadoop、Spark等大数据平台插件,或使用ManagementApi、GremlinApi。

Giraph基于Hadoop而建,将MapReduce中Mapper进行封装,未使用reducer。在Mapper中进行多次迭代,每次迭代等价于BSP模型中的SuperStep。一个Hadoop Job等价于一次BSP作业。

 

2.2       External Components Demand

组件名

Neo4j

JanusGraph

Giraph

URL

https://neo4j.com/developer/integration/

https://docs.janusgraph.org/latest/arch-overview.html

https://zh.wikipedia.org/wiki/Giraph

额外组件依赖

官方提供组件,可以与ES、MongoDB、Cassandra等NoSqlDb进行交互

计算框架可以选用Gephi、Giraph、TinkerGraph、Hadoop、Spark框架。

数据存储服务可以选用Cassandra、HBase或Berkeley DB服务。

数据索引可以选用Es、Solr或Lucene服务。

Giraph基于Hadoop而建,依赖Hadoop、Hive。

 

2.3       Algorithm Support

组件名

Neo4j

JanusGraph

Giraph

URL

https://github.com/neo4j-contrib/neo4j-graph-algorithms

http://tinkerpop.apache.org/docs/3.2.4/reference/#_a_collection_of_vertexprograms

http://sotera.github.io/distributed-graph-analytics/

算法支持

官方:

中心性算法:Pag`eRank、ArticleRank、中介中心性、接近中心性、调和中心性等算法。

社区检测算法:Louvain、LPA 标签传播、连通元件与强连通元件、三角形计数、聚类系数等算法。

路径探寻算法:最小权重生成树、最短路径、单源最短路径、All Pairs最短路径、A *法、(YenK)K最短路径、随机漫步等算法。

相似度算法:杰卡德相似度、余弦相似度、欧几里得距离、重叠相似度等算法。

官方:

PageRankVertexProgram、PeerPressureVertexProgram

其他实现(Sotera):
Louvain Modularity、弱连接原件、高中介集提取、叶压缩算法、Page Rank、邻域算法。

官方:

最短路径、出/入度计数、PageRank、连通元件算法。

其他实现(Sotera):
Louvain、弱连接原件、高中介集提取、叶压缩算法、Page Rank。

 

 

2.4       HF Subgraph Mining

组件名

Neo4j

JanusGraph

Giraph

URL

https://www.slideshare.net/nishantgandhi99/neo4j-vs-giraph

https://www.slideshare.net/ptgoetz/large-scale-graph-analytics-with-janusgraph

https://code.fb.com/core-data/scaling-apache-giraph-to-a-trillion-edges/

高频子图挖掘

节点数量受单机内存容量影响,最大连接数受Bolt线程池配置影响,在小数据集或稀疏数据集下性能表现良好,可以实现高频访问。

OLAP使用spark-connector通过大数据平台Apache Spark集群实现,拥有横向扩展的计算能力。

JanusGraph通过与大数据平台(Apache Spark,Apache Giraph,Apache Hadoop)的集成支持全局图形数据分析,报告和ETL 。

拥有横向扩展的计算能力,可进行计算密集型子图挖掘。

Giraph应用程序作为单个MapReduce作业运行,因此可以通过增加作业的工作者(Mapper节点)数量来轻松并行化。

拥有横向扩展的计算能力,可进行计算密集型子图挖掘。

 

 

3.JanusGraph Detail

3.1 Basic Pattern

JanusGraph本身就是一组没有执行线程的jar文件。连接和使用JanusGraph数据库有两种基本模式(JanusGraph Embedded、JanusGraph Server)和交互式Shell(Gremlin Console)方式:

模式

描述

Gremlin Console

Gremlin控制台是一个REPL(即交互式shell),与JanusGraph一起打包,可以通过控制台进行JanusGraph 图库的创建(连接)、查询等操作。

JanusGraph Embedded

嵌入式查询,JanusGraph 作为应用程序的一部分,执行Gremlin,查询同一JVM中的图库。

查询执行、JanusGraph缓存和事务处理均发生于此JVM。

存储后端,即查询结果的数据来源库,可能是本地库或远程库。

JanusGraph Server

机器上长期运行的服务器进程,允许远程客户端或运行在程序中的逻辑进行JanusGraph调用。

提交Gremlin查询到服务器,与JanusGraph实例交互。
JanusGraph原生支持Apache TinkerPop的Gremlin Server。

 

 

3.2 Configuration Each Pattern

不同模式下配置加载示例:

模式

配置加载

Gremlin Console

通过加载配置文件路径

graph  =  JanusGraphFactory.open (‘path / to / configuration.properties‘ )

JanusGraph Embedded

通过加载”后端存储名:配置文件地址或主机名”

graph = JanusGraphFactory.open(‘cql:localhost‘)

graph  =  JanusGraphFactory.open (‘berkeleyje:/ tmp / graph‘ )

JanusGraph Server

...

graphs: {

  graph: conf/janusgraph-berkeleyje.properties

}

scriptEngines: {

  gremlin-groovy: {

    plugins: { org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {},

               org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},

...

 

3.3 Classification Of Configuration

JanusGraph区分本地和全局配置选项,具体区分了以下五个配置选项范围:

配置类型

作用域

修改指南

LOCAL(本地配置)

单个JanusGraph实例

初始化实例时提供

MASKABLE(可屏蔽配置)

集群中的某个JanusGraph实例

本地配置文件提供则覆盖配置,若无本地配置文件则读取集群的全局配置

GLOBAL(全局配置)

集群中的所有JanusGraph实例

由全局配置提供,且无法在某实例上覆盖配置

GLOBAL_OFFLINE(离线全局配置)

集群中的所有JanusGraph实例

类似GLOBAL配置,但修改需要重启集群:
1:关闭集群,保留一个运行节点

2:关闭所有运行中的事务且无新事务提交

3:通过ManagementAPI修改配置,并commit

4:重启所有节点

FIXED(固定配置)

集群中的所有JanusGraph实例

由集群初始化是提供,且无法修改

 

 

3.4 Data Loading Process

后端存储中,数据被加载到JanusGraph的过程

过程描述

对图创建全局和以节点为中心的索引

加载所有节点

加载所有边

 

 

3.5 Storage Backend Comparison

不同后端存储架构、优点以及业务选用逻辑。

组件

架构

限制

优点

选用逻辑

Oracle Berkeley DB Java版

单机节点,同个JVM。

最大一亿节点限制;
单机的并发请求数限制;

整库遍历操作易耗尽内存;

受单点故障影响;

得益于处于同JVM,对于中小规模图库的访问,Berkeley DB具有比分布式存储更快速度。

测试和探索逻辑时选用。

对中小图库保证可用性和一致性。

无分布式架构。

Cassandra

分布式架构

-

高可用,无单点故障;
高性能,无读写瓶颈;

弹性扩展,可以动态增加或减少节点。

优先考虑可用性和可扩展性,在一致性上有所妥协,即查询结果的完整性(可用数据/所有数据)。

HBase

分布式架构

-

Hadoop生态系统紧密集成;

强一致性读写模型;

可扩展更多机器;
便于支持Hbase的MR任务的基类。

优先考虑一致性与分布性,并在可用性部分进行妥协,即响应请求的概率(查询结果数/查询总数)。

 

 

3.6 Schema and Data Model

每个JanusGraph图库都有一个由边标签、属性键和用到的顶点标签组成的模式。JanusGraph模式可以被显式或隐式地指定,官方建议明确指定模式,模式可以随着系统发展而作出调整,并对性能进行调优。

 

3.6.1 Defining Edge Labels

可以通过在graph(或management transaction)对象上调用makeEdgeLabel(String labelName)方法,得到一个builder,之后通过builder定义边的多重性,边的多重性有以下设置选项:

多重性

描述

MULTI

任意一对顶点,允许存在任意多个当前标签类型的边

SIMPLE

任意一对顶点,最多允许存在一条当前标签类型的边

MANY2ONE

任何顶点,最多允许一条当前类型出射边和任意多条当前类型入射边

ONE2MANY

任何顶点,最多允许一条当前类型入射边和任意多条当前类型出射边

ONE2ONE

任何顶点,最多允许一条当前类型入射边和最多一条当前类型出射边

 

示例:(若不指定多重性则默认为MULTI)

mgmt = graph.openManagement()

follow = mgmt.makeEdgeLabel(‘follow‘).multiplicity(MULTI).make()

mother = mgmt.makeEdgeLabel(‘mother‘).multiplicity(MANY2ONE).make()

mgmt.commit()

 

3.6.2 Defining Property Keys

边或顶点上的属性是键值对,属性键是Schema的一部分,并且可以限制属性类型和值的基数。可以通过在graph(或management transaction)对象上调用makePropertyKey(String propertyName)方法,得到属性键的builder,之后通过builder. datatype(Class)指定属性键的数据类型。JanusGraph会强制所有与属性键关联的值拥有数据类型配置,以此保证图数据的有效性。

 

 

数据类型

  1. 数据类型Object.class,可以允许任何(可序列化)值与键关联。官方建议尽可能使用具体的数据类型。配置的类型必须是具体的类,而不是接口或抽象类。
  2. JanusGraph会考虑类相等性,因此不允许添加已配置类型的子类。

 

 

JanusGraph原生支持的数据类型

 

类型

描述

String

字符数组

Character

单个字符

Boolean

true or false

Byte

字节值

Short

短整型

Integer

整型

Long

长整型

Float

4字节单精度浮点数

Double

8字节双精度浮点数

Date

java.util.Date

Geoshape

地理学形状:点、圆、方形

UUID

java.util.UUID

 

 

 

属性键基数

使用cardinality(cardinality),在任意指定节点上,定义与键关联的值基数,以下是基数可选项:

名称

描述

SINGLE

(default)

对于每个元素,当前键最多允许一个值

LIST

对于每个元素,当前键允许任意个值

SET

对于每个元素,当前键允许任意个非重复值

 

默认基数项为SINGLE,故所有边的基数均为SINGLE,所以向边上的某个键附加多个值是不允许的。

示例:

mgmt = graph.openManagement()

birthDate = mgmt.makePropertyKey(‘birthDate‘).dataType(Long.class).cardinality(Cardinality.SINGLE).make()

name = mgmt.makePropertyKey(‘name‘).dataType(String.class).cardinality(Cardinality.SET).make()

sensorReading = mgmt.makePropertyKey(‘sensorReading‘).dataType(Double.class).cardinality(Cardinality.LIST).make()

mgmt.commit()

 

 

 

3.6.3 Relation Type

边的标签和属性键一同被引用作为关系类型,JanusGraph API中有一些方法可以查询是否存在或检索包含属性键和边标签的关系类型。

 

示例:

mgmt = graph.openManagement()

if (mgmt.containsRelationType(‘name‘))

name = mgmt.getPropertyKey(‘name‘)

mgmt.getRelationTypes(EdgeLabel.class)

mgmt.commit()

 

 

3.6.4 Defining Vertex Labels

类似于边,顶点也有标签,但顶点标签是可选的。标签有助于区分不同的顶点类型,虽然顶点标签在概念和数据模型

 

 

 
分类: NoSql
好文要顶 关注我 收藏该文 技术分享图片 技术分享图片
0
0
 
 
 
« 上一篇:  Spring-Docker简易指南
posted @ 2019-03-20 10:21 Miracle的记事簿 阅读(658) 评论(0) 编辑 收藏
 
 
刷新评论刷新页面返回顶部
发表评论

昵称:

评论内容:
技术分享图片 技术分享图片 技术分享图片 技术分享图片 技术分享图片 技术分享图片
 

 退出 订阅评论

 

[Ctrl+Enter快捷键提交]

 
【推荐】超50万C++/C#源码: 大型实时仿真组态图形源码
【推荐】零基础轻松玩转云上产品,获壕礼加返百元大礼
【推荐】华为IoT平台开发者套餐9.9元起,购买即送免费课程
 
 
 
 
 
 
 
 

 

2018-11-23 graph图数据库概览,经过一个星期的Demo终于看懂了这篇文章20180818图数据库概览

技术分享图片

20180818图数据库概览

20180818图数据库概览

技术分享图片

朱金华

朱金华

1.总体趋势

Knowledge Base of Relational and NoSQL Database Management Systems?db-engines.com

根据DB-Engines的数据库DB-Engines排名,图数据库一骑绝尘,

图数据库2018-8的最新排名如下

Neo4j仍是最流行的图数据库,图中JanusGraph的排名并不靠前,但要考虑到他是之前很火已经被收购停止发展的titan的fork分支,所以这点加成还是可以算上的。图中与OrientDB趋势基本一致的哪个黑线就是titabDB生前的排名。

CosmosDB/DatastaxStardog/Sqrrl等商业数据库就不做分析了, 本文只对Neo4j、OrientDB、JanusGraph、Giraph、HugeGraph做下分析,其中HugeGraph并不在上面,这是百度开源的图数据库,简单看了下也不错,列在这。

2.图数据库组件

一个完善的图数据系统应该至少包括图存储及图处理引擎,数据导入导出,管理运维,查询和计算,商业化产品需要有高可用及容灾备份。

图存储和图处理:这个是图数据库的核心,图存储负责将关系型数据集非结构化数据转成图结构进行存储,这里的存储可以为原生存储或序列化之后的非原生存储;图处理则负责数据的更新及运算。

数据导入导出:数据从外界到图存储的导入导出能力,如从外界的json、csv,rdf等数据形式导入到图数据库中,或将图数据库中的数据导出来。

管理运维:管理运维则包含系统的监控,配置及可视化能力

查询和计算:主要指提供查询语言供用户进行图的查询遍历等操作。

3.图数据库

【1】Neo4j

是老牌的图数据代表。其功能强大,性能也不错,单节点的服务器可承载上亿级的节点和关系,单节点性能不够时也可进行分布式集群部署。

Neo4j有自己的后端存储,不必如同JanusGraph等一样还要依赖另外的数据库存储。 Neo4j在每个节点中存储了每个边的指针,因而遍历时效率相当高。

Neo4j分为社区版和企业版,社区版功能受限,另外其提供可视化的客户端感觉很不错。

据neo4j的中国合作方的社区中描述,主要区别如下:

1、容量:社区版最多支持 320 亿个节点、320 亿个关系和 640 亿个属性,而企业版没有这个限制;

2、并发:社区版只能部署成单实例,不能做集群。而企业版可以部署成高可用集群或因果集群,从而可以解决高并发量的问题;

3、容灾:由于企业版支持集群,部分实例出故障不会影响整个系统正常运行;

4、热备:社区版只支持冷备份,即需要停止服务后才能进行备份,而企业版支持热备,第一次是全量备份,后续是增量备份;

5、性能:社区版最多用到 4 个内核,而企业能用到全部内核,且对性能做了精心的优化;

6、支持:企业版客户能得到 5X10 电话支持(Neo4j 美国电话、邮件,微云数聚电话、微信、邮件);

考虑到这些限制,要选开源免费大容量分布式的图数据库的可以跳过了,研究图论及小型应用或不差钱的项目则选其的支持服务则另当别论。另外neo4j的协议为GPLv3,这个也不适合选用。

【2】OrientDB

OrientDB据描述性能可以达到Neo4j的数倍,但也有测试表明在遍历时磁盘空间增加,以空间换时间,遍历性能不高,但计算最短路径等性能高。 Neo4J和OrientDB在插入数据时候都会默认建立索引,索引的不同也造成了其不同操作的性能差异; Neo4J:擅长遍历图及不存在大量关系的节点的图计算 OrientDB:侧重文档数据库,主要还是SB树索引导致,空间浪费比较大;插入节点与neo4j差不多,但是在插入节点关系即边时无优化;在图论算法上性能高,但遍历性能低。 OrientDB也有社区版及企业版,但是其基于Apache2.0协议,这个更友好

【3】JanusGraph

Distributed graph database?janusgraph.org

技术分享图片

图标

JanusGraph基于Titan发展而来,包含其所有功能,采用Tikerpop的Gremlin图查询语言,

有单独的后端存储,支持Cassandra/HBase/BerkeleyDB等做存储,支持Solr/ES/Lucence等做图索引 支持Spark GraphX/Giraph等图分析计算引擎及Hadoop分布式计算框架 原生支持集成了Tinkerpop系列组件:Gremlin查询语言,Gremlin-Server及Gremlin applications。 采用很友好的Apache2.0协议,支持对接可视化组件如Cytoscape, plugin for Apache TinkerPop,GraphexpKeyLines by Cambridge IntelligenceLinkurious

【4】HugeGraph

王二铁:百度安全开源大规模图数据库HugeGraph?zhuanlan.zhihu.com

技术分享图片

图标

HugeGraph是支持Apache TinkerPop 3框架和Gremlin图查询语言的大型分布式图数据库,据其描述其性能是相当强劲,刚开源不久。不过貌似每个都说自己是最好最强的...

HugeGraph是一款面向分析型,支持批量操作的图数据库系统,它能够与大数据平台无缝集成,有效解决海量图数据的存储、查询和关联分析需求。HugeGraph支持HBase和Cassandra等常见的分布式系统作为其存储引擎来实现水平扩展。HugeGraph可以与Spark GraphX进行链接,借助Spark GraphX图分析算法(如PageRank、Connected Components、Triangle Count等)对HugeGraph的数据进行分析挖掘。 HugeGraph的主要特点包括: 基于TinkerPop 3 API实现,支持Gremlin图查询语言; 拥有完善的周边工具链和相关功能组件,可以满足图数据库开发的基本需求,提供易用高效的使用体验; 具备独立的Schema管理模块,丰富完善的Schema校验机制,确保图数据库中的数据完整性和一致性; 支持数据的备份和还原,可以在不同的后端存储之间转换; 多种ID生成策略应对不同业务场景,拥有完善的索引管理机制,支持多种索引查询操作; 可以实现与Hadoop、Spark、HBase、ES等大数据系统集成,支持多种Bulk Load操作,实现海量数据快速插入; 除上述特定之外,HugeGraph还针对图数据库的高频应用(例如:ShortestPath、k-out、k-neighbor等)做了特定性能优化,并且为用户提供更为高效的使用体验

我的感觉是跟titan/JanusGraph蛮像的

看其致谢果不其然,不过里面还是蛮多创新及扩展的,如果他能持续的接纳Janus和DataStax的新特性并长久发展的话用这个倒是不错。

HugeGraph relies on theTinkerPopframework, we refer to the storage structure ofJanusGraphand the schema definition ofDataStax. Thanks to Tinkerpop, thanks to JanusGraph and Titan, thanks to DataStax. Thanks to all other organizations or authors who contributed to the project.

3.图分析系统

上面简单介绍了几个图数据库,也提到其后端存储,neo4j等使用自己的原生图存储,而JanusGraph/HugeGraph等则用非原生图存储。

原生图存储一般都是经过专门为了存储和管理图结构而优化的,遍历查询性能很高,但掐非遍历类的查询则不占优势,且为了全局搜索还会占用大量内存。

非原生图存储通常将图结构序列化存储到RDBMS或其他通用存储中,如JanusGraph的HBase/Cassandra,HugeGraph甚至增加了对MySQL等的支持。

一个图分析系统除了图数据库外还要有图计算引擎,主要目的是为了进行除遍历外的图算法分析。前述的图数据库相当于OLTP,而图计算则相当于OLAP。有的图数据库也继承了少量的图计算能力,但真正的大型系统还是需要单独的计算框架。

基于图的并行计算框架,有google的Pregel,基于Spark的GraphX,Apache下的Giraph/HAMA以及GraphLab,其中Giraph是Pregel的开源实现。

 

 
 
 
 
 
 

 
 
 
 

 
 
 

 
 
 
 
 
 
 

 

图数据库:

原文:https://www.cnblogs.com/cx2016/p/11415767.html

(0)
(0)
   
举报
评论 一句话评论(0
分享档案
最新文章
教程昨日排行
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!