Skip to content
Permalink
Browse files
Modify homepage content (#20)
Change-Id: I40677804ca9803886a915d806531457756a4ba7b
  • Loading branch information
Linary authored and zhoney committed Mar 6, 2019
1 parent b2c7f7a commit a0d02116e976719f404c214435f0fcfbd6fa325c
Showing 5 changed files with 28 additions and 28 deletions.
@@ -2,27 +2,40 @@

### Summary

HugeGraph是一款开源图数据库(Graph Database)系统([GitHub项目地址](https://github.com/hugegraph/hugegraph)),可以存储海量的顶点(Vertex)和边(Edge),
实现了[Apache TinkerPop 3](https://tinkerpop.apache.org)框架,支持[Gremlin](https://tinkerpop.apache.org/gremlin.html)查询语言。
HugeGraph支持多用户并行操作,用户可输入Gremlin查询语句,并及时得到图查询结果。也可在用户程序中调用HugeGraph API进行图分析或查询。
HugeGraph是一款易用、高效、通用的开源图数据库系统(Graph Database,[GitHub项目地址](https://github.com/hugegraph/hugegraph)),
实现了[Apache TinkerPop3](https://tinkerpop.apache.org)框架及完全兼容[Gremlin](https://tinkerpop.apache.org/gremlin.html)查询语言,
具备完善的工具链组件,助力用户轻松构建基于图数据库之上的应用和产品。HugeGraph支持百亿以上的顶点和边快速导入,并提供毫秒级的关联关系查询能力(OLTP),
并可与Hadoop、Spark等大数据平台集成以进行离线分析(OLAP)。

HugeGraph典型应用场景包括深度关系探索、关联分析、路径搜索、特征抽取、数据聚类、社区检测、
知识图谱等,适用业务领域有如网络安全、电信诈骗、金融风控、广告推荐、社交网络和智能机器人等。

本系统的主要应用场景是解决百度安全事业部所面对的反欺诈、威胁情报、黑产打击等业务的图数据存储和建模分析需求,在此基础上逐步扩展及支持了更多的通用图应用。

### Features

HugeGraph支持在线及离线环境下的图操作,支持批量导入数据,支持高效的复杂关联关系分析,并且能够与大数据平台无缝集成。
HugeGraph支持多用户并行操作,用户可输入Gremlin查询语句,并及时得到图查询结果,也可在用户程序中调用HugeGraph API进行图分析或查询。

本系统具备如下特点:

- 基于TinkerPop 3 框架实现,支持Gremlin图查询语言
- 易用:HugeGraph支持Gremlin图查询语言与Restful API,同时提供图检索常用接口,具备功能齐全的周边工具,轻松实现基于图的各种查询分析运算。
- 高效:HugeGraph在图存储和图计算方面做了深度优化,提供多种批量导入工具,轻松完成百亿数据快速导入,通过优化过的查询达到图检索的毫秒级响应。支持数千用户并发的在线实时操作。
- 通用:HugeGraph支持Apache Gremlin标准图查询语言和Property Graph标准图建模方法,支持基于图的OLTP和OLAP方案。集成Apache Hadoop及Apache Spark大数据平台。
- 可扩展:支持分布式存储、数据多副本及横向扩容,内置多种后端存储引擎,也可插件式轻松扩展后端存储引擎。
- 开放:HugeGraph代码开源(Apache 2 License),客户可自主修改定制,选择性回馈开源社区。

本系统的功能包括但不限于:

- 支持从TXT、CSV、JSON等格式的文件中批量导入数据
- 具备独立的Schema元数据信息,方便第三方系统集成
- 具备可视化操作界面,降低用户使用门槛
- 存储系统采用插件方式,支持RocksDB、Cassandra、ScyllaDB、HBase及MySQL等多种后端
- 优化的图接口:最短路径(Shortest Path)、K步连通子图(K-neighbor)、K步到达邻接点(K-out)等
- 基于Apache TinkerPop3框架实现,支持Gremlin图查询语言
- 支持属性图,顶点和边均可添加属性,支持丰富的属性类型
- 可以对边和顶点的属性建立索引,支持精确查询、范围查询、全文检索
- 支持多顶点ID策略:支持主键ID、支持自动生成ID、支持用户自定义字符串ID、支持用户自定义数字ID
- 具备独立的Schema元数据信息,方便第三方系统集成
- 支持多顶点ID策略:支持主键ID、支持自动生成ID、支持用户自定义字符串ID、支持用户自定义数字ID
- 可以对边和顶点的属性建立索引,支持精确查询、范围查询、全文检索
- 存储系统采用插件方式,支持RocksDB、Cassandra、ScyllaDB、HBase、Palo、MySQL以及InMemory等
- 与Hadoop、Spark GraphX等大数据系统集成,支持Bulk Load操作

### Modules
@@ -2,7 +2,7 @@

### 1 概述

作为一款通用的图数据库产品,HugeGraph需具备图数据的基本功能,如下图所示。HugeGraph包括三个层次的功能,分别是存储层、计算层和用户接口层。 HugeGraph支持OLTP和OLAP两种图计算类型,其中OLTP实现了[Apache TinkerPop 3](https://tinkerpop.apache.org)框架,并支持[Gremlin](https://tinkerpop.apache.org/gremlin.html)查询语言。 OLAP计算是基于SparkGraphX实现。
作为一款通用的图数据库产品,HugeGraph需具备图数据的基本功能,如下图所示。HugeGraph包括三个层次的功能,分别是存储层、计算层和用户接口层。 HugeGraph支持OLTP和OLAP两种图计算类型,其中OLTP实现了[Apache TinkerPop3](https://tinkerpop.apache.org)框架,并支持[Gremlin](https://tinkerpop.apache.org/gremlin.html)查询语言。 OLAP计算是基于SparkGraphX实现。

<center>
<img src="/images/design/architectural-overview.png" alt="image">
@@ -6,12 +6,12 @@

#### 1.1 HugeGraph与TitanDB的异同

HugeGraph和TitanDB都是基于[Apache TinkerPop 3](https://tinkerpop.apache.org)框架的图数据库,均支持[Gremlin](https://tinkerpop.apache
HugeGraph和TitanDB都是基于[Apache TinkerPop3](https://tinkerpop.apache.org)框架的图数据库,均支持[Gremlin](https://tinkerpop.apache
.org/gremlin.html)图查询语言,在使用方法和接口方面具有很多相似的地方。然而HugeGraph是全新设计开发的,其代码结构清晰,功能较为丰富,接口更为友好等特点。

HugeGraph相对于TitanDB而言,其主要特点如下:

- HugeGraph拥有较为完善的工具组件。HugeGraph目前有HugeApi、HugeGraph-Client、HugeGraph-Loader、HugeGraph-Studio、HugeGraph-Spark等完善的工具组件,可以完成系统集成、数据载入、图可视化查询、Spark 连接等功能;
- HugeGraph目前有HugeGraph-API、HugeGraph-Client、HugeGraph-Loader、HugeGraph-Studio、HugeGraph-Spark等完善的工具组件,可以完成系统集成、数据载入、图可视化查询、Spark 连接等功能;
- HugeGraph具有Server和Client的概念,第三方系统可以通过jar引用、client、api等多种方式接入,而TitanDB仅支持jar引用方式接入。
- HugeGraph的Schema需要显式定义,所有的插入和查询均需要通过严格的schema校验,目前暂不支持schema的隐式创建。
- HugeGraph充分利用后端存储系统的特点来实现数据高效存取,而TitanDB以统一的Kv结构无视后端的差异性。
@@ -45,15 +45,9 @@ brother | edge | character | character | -
pet | edge | character | character | -
lives | edge | character | location | reason

HugeGraph需要进行严格的schema校验,对于edge label而言需要明确每一个edge label的source vertex label和target vertex label, 且相同的一组source vertex label和target vertex label只能有一个唯一的edge label。 因此,如果character和character有一种关系为father,在同一个图内部god和human之间的边就不能叫father
在HugeGraph中,每个edge label只能作用于一对source vertex label和target vertex label。也就是说,如果一个图内定义了一种关系father连接character和character,那farther就不能再连接其他的vertex labels

关于`Edge Label` 强约束 "相同的一组`src vertex label``tgt vertex label`只能有一个唯一的`edge label`" 的原因有2个:

1. 如果`source``target`有多种`edge label`, 同时每一种`edge label`拥有不同的属性,那么`edge label`的属性就可能产生歧义,无法区分属性到底是属于哪条`edge`的。

2. HugeGraph的`edgeId`是通过`src+label+tgt`拼接而成,同时HugeGraph支持多种Id生成策略,在解析`edgeId`的时候需要获取`vertex label`中的Id策略配置才能正确解析`vertexId`。 在`edge label` 满足 " 相同的一组`source vertex label``target vertex label`只能有一个唯一的`edge label` "约束的前提下, 可以通过`edge label`获取唯一的`src vertex label``tgt vertex label`,而不需要冗余存储`src vertex label``tgt vertex label`信息。

因此本例子将原TitanDB中的monster, god, human, demigod均使用相同的`vertex label: character`来表示, 同时增加属性type来标识人物的类型。 `edge label`与原TitanDB保持一致。当然为了满足`edge label`约束,也可以通过调整`edge label``name`来实现。
因此本例子将原TitanDB中的monster, god, human, demigod均使用相同的`vertex label: character`来表示, 同时增加属性type来标识人物的类型。`edge label`与原TitanDB保持一致。当然为了满足`edge label`约束,也可以通过调整`edge label``name`来实现。

### 2 Graph Schema and Data Ingest Examples

@@ -1,8 +1,8 @@
## HugeGraph Gremlin

HugeGraph支持[Apache TinkerPop 3](https://tinkerpop.apache.org)的图形遍历查询语言[Gremlin](https://tinkerpop.apache.org/gremlin.html)。 SQL是关系型数据库查询语言,而Gremlin是一种通用的图数据库查询语言,Gremlin可用于创建图的实体(Vertex和Edge)、修改实体内部属性、删除实体,也可执行图的查询操作。
HugeGraph支持[Apache TinkerPop3](https://tinkerpop.apache.org)的图形遍历查询语言[Gremlin](https://tinkerpop.apache.org/gremlin.html)。 SQL是关系型数据库查询语言,而Gremlin是一种通用的图数据库查询语言,Gremlin可用于创建图的实体(Vertex和Edge)、修改实体内部属性、删除实体,也可执行图的查询操作。

建议通过Gremlin执行图的查询和遍历,而关于图的增加、修改和删除等更新操作则通过HugeGraph的Graph Api接口进行。因为Graph Api对增加、修改和删除操作做了很多优化,执行效率比Gremlin更加高效
Gremlin可用于创建图的实体(Vertex和Edge)、修改实体内部属性、删除实体,更主要的是可用于执行图的查询及分析操作

### TinkerPop Features

@@ -90,13 +90,6 @@ public class SingleExample {
.ifNotExist()
.create();
schema.indexLabel("personByName")
.onV("person")
.by("name")
.secondary()
.ifNotExist()
.create();
schema.indexLabel("personByCity")
.onV("person")
.by("city")

0 comments on commit a0d0211

Please sign in to comment.