Skip to content
Permalink
Browse files
hugegraph-1119 tiny modification
Change-Id: I411d0714a0080b6c62eee7db77c24d5eed0695e7
  • Loading branch information
zhoney committed Apr 25, 2018
1 parent a2512ae commit d5377e615c29a7c159651489297b13c7dbdeca09
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 14 deletions.
@@ -1,6 +1,6 @@
# HugeGraph Design Concepts
## HugeGraph Design Concepts

## 1. Property Graph
### 1. Property Graph
常见的图数据表示模型有两种,分别是RDF(Resource Description Framework)模型和属性图(Property Graph)模型。
RDF和Property Graph都是最基础、最有名的图表示模式,都能够表示各种图的实体关系建模。
RDF是W3C标准,而Property Graph是工业标准,受到广大图数据库厂商的广泛支持。HugeGraph目前采用Property Graph。
@@ -18,7 +18,7 @@ HugeGraph对应的存储概念模型也是参考Property Graph而设计的,具
如果要更新关系的属性需要通过read-and-modify方式,先读取所有属性,修改部分属性,然后再写入存储系统,更新效率较低。
从经验来看顶点属性的修改需求较多,而边的属性修改需求较少,例如PageRank和Graph Cluster等计算都需要频繁修改顶点的属性值。

## 2. 图分区方案
### 2. 图分区方案
对于分布式图数据库而言,图的分区存储方式有两种:分别是边分割存储(Edge Cut)和点分割存储(Vertex Cut),如下图所示。
使用Edge Cut方式存储图时,任何一个顶点只会出现在一台机器上,而边可能分布在不同机器上,这种存储方式有可能导致边多次存储。
使用Vertex Cut方式存储图时,任何一条边只会出现在一台机器上,而每相同的一个点可能分布到不同机器上,这种存储方式可能会导致顶点多次存储。
@@ -28,7 +28,7 @@ HugeGraph对应的存储概念模型也是参考Property Graph而设计的,具
采用EdgeCut分区方案可以支持高性能的插入和更新操作,而VertexCut分区方案更适合静态图查询分析,因此EdgeCut适合OLTP图查询,VertexCut更适合OLAP的图查询。
HugeGraph目前采用EdgeCut的分区方案。

## 3. VertexId 策略
### 3. VertexId 策略

HugeGraph的Vertex支持三种ID策略,在同一个图数据库中不同的VertexLabel可以使用不同的Id策略,目前HugeGraph支持的Id策略分别是:
* AUTOMATIC:使用Snowflake算法自动生成全局唯一Id,Long类型
@@ -83,7 +83,7 @@ HugeGraph的Vertex支持三种ID策略,在同一个图数据库中不同的Ver
3. 采用CUSTOMIZE_STRING或CUSTOMIZE_NUMBER策略,用户自己保证唯一


## 3. EdgeId 策略
### 4. EdgeId 策略
HugeGraph的EdgeId是由`srcVertexId`+`edgeLabel`+`sortKey`+`tgtVertexId`四部分组合而成。其中`sortKey`是HugeGraph的一个重要概念。
在Edge中加入`sortKey`作为Edge的唯一标识的原因有两个:

@@ -98,19 +98,19 @@ HugeGraph的EdgeId是由`srcVertexId`+`edgeLabel`+`sortKey`+`tgtVertexId`四部

> HugeGraph的边仅支持有向边,无向边可以创建Out和In两条边来实现。
## 4. HugeGraph transaction overview
### 5. HugeGraph transaction overview

### TinkerPop事务概述
##### TinkerPop事务概述
TinkerPop transaction事务是指对数据库执行操作的工作单元,一个事务内的一组操作要么执行成功,要么全部失败。
详细介绍请参考TinkerPop官方文档:http://tinkerpop.apache.org/docs/current/reference/#transactions

### TinkerPop事务操作接口
##### TinkerPop事务操作接口
- open 打开事务
- commit 提交事务
- rollback 回滚事务
- close 关闭事务

### TinkerPop事务规范
##### TinkerPop事务规范
- 事务必须显示提交后才可生效(未提交时修改操作只有本事务内查询可看到)
- 事务必须打开之后才可提交或回滚
- 如果事务设置自动打开则无需显示打开(默认方式),如果设置手动打开则必须显示打开
@@ -121,7 +121,7 @@ TinkerPop transaction事务是指对数据库执行操作的工作单元,一

更多事务规范用例见:[Transaction Test](https://github.com/apache/tinkerpop/blob/master/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/TransactionTest.java)

### HugeGraph事务实现
##### HugeGraph事务实现
- 一个事务中所有的操作要么成功要么失败
- 一个事务只能读取到另外一个事务已提交的内容(Read committed)
- 所有未提交的操作均能在本事务中查询出来,包括:
@@ -191,12 +191,13 @@ TinkerPop transaction事务是指对数据库执行操作的工作单元,一
}
```

### 事务实现原理
##### 事务实现原理
- 服务端内部通过将事务与线程绑定实现隔离(ThreadLocal)
- 本事务未提交的内容按照时间顺序覆盖老数据以供本事务查询最新版本数据
- 底层依赖后端数据库保证事务原子性操作(如Cassandra/RocksDB的batch接口均保证原子性)

#### 注意
###### *注意*
> Restful API暂时未暴露事务接口
> TinkerPop API允许打开事务,请求完成时会自动关闭(Gremlin Server强制关闭)
@@ -22,7 +22,7 @@ $ wget http://api.xdata.baidu.com/hdfs/yqns02/hugegraph/hugegraph-release-${vers
$ tar -zxvf hugegraph-release-${version}-SNAPSHOT.tar.gz
```

_注:${version}为版本号,最新版本号可参考Download页面,或直接从Download页面点击链接下载_
_注:${version}为版本号,最新版本号可参考[Download](../download.md)页面,或直接从Download页面点击链接下载_

#### 2.2 源码编译

@@ -68,7 +68,7 @@ $ mvn package -DskipTests

### 3 配置

快速开始部分以 Cassandra 作为后端,不需要用户做额外的配置,使用默认配置即可。详细的配置介绍请参考[配置](http://hugegraph.baidu.com/guides/config-guide.html)
快速开始部分以 Cassandra 作为后端,不需要用户做额外的配置,使用默认配置即可。详细的配置介绍请参考[配置文档](http://hugegraph.baidu.com/guides/config-guide.html)

### 4 启动

0 comments on commit d5377e6

Please sign in to comment.