介绍
什么是 Graph?
在数据库领域中,图表是每个项目与数据集中的另一个项目有任何类型的关系的项目集。
什么是顶点和边缘?
- 顶部 - 顶部是图表中的数据点.对于那些熟悉任何形式的SQL数据库的人来说,顶部可以被视为行/记录。对于那些不熟悉SQL的人来说,顶部可以被视为数据片。 *边缘 - 边缘是两个不同的顶部之间的关系。
例子
在社交网络中,你有人,你有每个人之间的关系. 人们被表示为顶部,而关系被表示为边缘. 有许多不同类型的关系,如:结婚,朋友,在关系中,与工作,等等. 这对图表来说是一样的. 不同类型的边缘有无限的可能性,不同类型的顶部也有无限的可能性。
图形的例子

在本图中,图表的顶部只是整数,边缘没有标记,尽管简单,但这仍然是一个图表。
重量图表
在航空公司的例子中,当处理从A点到B点的飞机时,你想选择飞机采取的最佳路径。

在这里,重量代表了两个机场之间的距离,所以,例如,在上面的图表中,从LAX到ORD的成本是1749。
图形数据库
图表数据库是一个 NoSQL 数据库,它存储信息作为顶点和边缘(节点和关系)。而不是具有外部密钥和选择陈述,您使用边缘和图表跨度来查询数据。
在本教程中,我们将安装Neo4J:一个非常流行的图形数据库,为几乎任何流行的编程语言提供了许多语言绑定。
安装 Neo4J
将 Neo4J 键添加到 apt 包管理器中:
1wget -O - http://debian.neo4j.org/neotechnology.gpg.key | apt-key add -
将 Neo4J 添加到 Apt 源列表:
1echo 'deb http://debian.neo4j.org/repo stable/' > /etc/apt/sources.list.d/neo4j.list
更新包管理器:
1apt-get update
安裝 Neo4J:
1apt-get install neo4j
Neo4J 应该在运行,您可以通过以下命令来检查
1service neo4j-service status
Neo4J RESTful API 和 Cypher 查询语言
Neo4J令人惊叹的一点是,它有一个非常易于使用的RESTful API,这意味着它可以被几乎任何可以执行Web请求的编程语言使用。在Neo4J数据库上执行的许多操作都使用Cypher查询执行。
对 Neo4J RESTful API 的 Web 请求的结构如下:
1curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://SERVERNAME:7474/db/data/cypher -d '{
2 "query" : "CYPHER QUERY GOES HERE",
3 "params" : {
4 QUERY PARAMETERS GO HERE
5 }
6}'
将数据添加到 Neo4J
Neo4J是一个数据库,数据库需要数据,所以让我们添加一些数据!
创建一个新节点:
1curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
2 "query" : "CREATE (n:Person { name : {name} }) RETURN n",
3 "params" : {
4 "name" : "Foo"
5 }
6}'
我之前提到,图表数据库将数据存储为节点和关系. 一个关系需要两个节点,所以让我们创建另一个节点:
1curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
2 "query" : "CREATE (n:Person { name : {name} }) RETURN n",
3 "params" : {
4 "name" : "Bar"
5 }
6}'
现在我们可以创建这两个节点之间的关系:
1curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/node/0/relationships -d '{
2 "to" : "http://localhost:7474/db/data/node/1",
3 "type" : "Comes Before"
4}
5}'
使用 Cypher 来查询 Neo4J
以下是我们可以用来查看我们之前插入的数据的一些数字查询示例。
我们可以从我们创建的第一个节点开始,并获得所有连接的节点和相应的关系:
1curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
2 "query" : "MATCH (x {name: {startName}})-[r]->(n) RETURN type(r), n.name",
3 "params" : {
4 "startName" : "Foo"
5 }
6}'
返回图表中的所有节点的名称属性(注:这不应该在大图表上执行):
1curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
2 "query" : "START n = node(*) return n.name",
3 "params" : {
4 }
5}'
返回图表中的所有关系类型(注:这不应该在大图表上执行):
1curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{
2 "query" : "START r=rel(*) return type(r) ",
3 "params" : {
4 }
5}'
可以找到 Neo4J RESTful API 提供的更完整的描述和方法列表 这里,以及有关 Cypher 查询语言的信息可以找到 这里。