## 说明
> + 本手册主要记录TigerGragh学习过程中遇到的一些疑惑和心得
> + 带领大家从搭建环境开始到实战使用,完全没接触过图数据库的新手也可轻松入门。
> + 本手册为我实际操作过程中的总结,更全面的可查看官方文档
 
## 图数据库简介
* 定义:a database that uses graph structures for semantic queries with nodes, edges and properties to represent and store data – independent of the way the data is stored internally. It’s really the model and the implemented algorithms that matter.(使用图形结构进行语义查询的数据库,包含节点、边和属性来表示和存储数据——与数据在内部存储的方式无关。真正重要的是模型和实现的算法。)
 
## 图形数据库和关系数据库分析对比
```
简单的说:
图形数据库是NoSQL数据库的一种,
但和其它的NoSQL数据库非常不同:
丰富的关系表示,完整的事务支持,却没有一个纯正的横向扩展解决方案。
```
* NoSQL(Not Only SQL)数据库泛指非关系型的数据库。数据库常常可以用来处理传统的关系型数据库所难以解决的一系列问题。通常情况下,这些NoSQL数据库分为Graph,Document,Column Family以及Key-Value Store等四种,这四种类型的数据库分别使用了不同的数据结构来记录数据,所适用的场景也不尽相同。
* 在使用关系型数据库时常常会遇到一系列非常复杂的设计问题。这种彼此关联的关系常常会非常复杂,而且在两个实体之间常常同时存在着多个不同的关系。在尝试使用关系型数据库对这些关系进行建模时,我们首先需要建立表示各种实体的一系列表,这些表常常需要通过一系列关联表将它们关联起来,我们需要大量的关联表来记录这一系列复杂的关系。在更多实体引入之后,我们将需要越来越多的关联表,从而使得基于关系型数据库的解决方案繁琐易错。
* 在需要描述大量关系时,传统的关系型数据库已经不堪重负。它所能承担的是较多实体但是实体间关系略显简单的情况。而对于这种实体间关系非常复杂,常常需要在关系之中记录数据,而且大部分对数据的操作都与关系有关的情况,原生支持了关系的图形数据库才是正确的选择。它不仅仅可以为我们带来运行性能的提升,更可以大大提高系统开发效率,减少维护成本。
## 举例说明
+ 图形数据库对数据进行抽象的方式实际上和关系型数据库非常接近。
+ 每个结点仍具有标示自己所属实体类型的标签,也既是其所属的结点集,并记录一系列描述该结点特性的属性。
+ 除此之外,我们还可以通过关系来连接各个结点。
**简单数据关系**
![](https://img.kancloud.cn/c2/b2/c2b23b0352839879d874cf987f3b9655_303x243.png)
![](https://img.kancloud.cn/c2/b2/c2b23b0352839879d874cf987f3b9655_303x243.png)
**复杂数据关系**
![](https://img.kancloud.cn/d2/1c/d21c27fbf7a3f9df3b5c15f3cbcd0f9a_348x360.png)
 
可以看到,在传统数据库中,需要表示多对多关系时,我们常常需要创建一个关联表来记录不同实体的多对多关系,而且这些关联表常常不用来记录信息。如果两个实体之间拥有多种关系,那么我们就需要在它们之间创建多个关联表。**而在一个图形数据库中**,我们只需要标明两者之间存在着不同的关系,例如用DirectBy关系指向电影的导演,或用ActBy关系来指定参与电影拍摄的各个演员。同时在ActBy关系中,我们更可以通过关系中的属性来表示其是否是该电影的主演。而且从上面所展示的关系的名称上可以看出,关系是有向的。如果希望在两个结点集间建立双向关系,我们就需要为每个方向定义一个关系。
+ 也就是说,相对于关系数据库中的各种关联表,图形数据库中的关系可以通过关系能够包含属性这一功能来提供更为丰富的关系展现方式