如何在UbuntuVPS上安装Neo4J
介绍
什么是图表?
图是由边连接的一组顶点。 在数据库领域,图是一组项目,每个项目与数据集中的另一个项目具有任何类型的关系。
什么是顶点和边?
- 顶点 - 顶点是图中的数据点。 对于熟悉任何形式的 SQL 数据库的人来说,一个顶点可以被视为一行/记录。 对于那些不熟悉 SQL 的人来说,一个顶点可以看作是一条数据。
- 边 - 边是两个不同顶点之间的关系。 一条边很难翻译成 SQL 术语,因为它们在图形数据库中非常灵活,但一条边可以被视为连接两条数据的方式。
例子
社交网络是大多数人可以关联的图表的最佳示例之一。 在社交网络中,你有人,每个人之间都有关系。 人用顶点表示,关系用边表示。 有许多不同类型的关系,例如:已婚,朋友,有关系,工作等。 图表也是如此。 不同类型的边有无限可能,不同类型的顶点也有无限可能。
图示示例
[[File:“%3Ca]] https://assets.digitalocean.com/articles/Neo4J_Ubuntu/1.png ”>
在这张图片中,图的顶点只是整数,边没有标记。 尽管很简单,但这仍然是一个图表。
加权图
以航空公司为例,在处理从 A 点到 B 点的飞机时,您希望为飞机选择最佳路径。 让机场可视化为顶点,它们之间的飞行路径是边。
[[File:“%3Ca]] https://assets.digitalocean.com/articles/Neo4J_Ubuntu/2.png ”>
每条边都被分配了一个权重或成本,以使用它。 这里,权重代表两个机场之间的距离。 例如,在上图中,从 LAX 到 ORD 的成本是 1749。 加权图在距离是一个因素的地理数据表示中特别有用。
图数据库
图数据库是将信息存储为顶点和边(节点和关系)的 NoSQL 数据库。 您无需使用外键和选择语句,而是使用边和图遍历来查询数据。 这种查询数据的方法在许多情况下都非常强大,例如社交网络、生物学、化学、商业分析以及数据最好表示为与数据集中其他项目有关系的项目的任何情况。
在本教程中,我们将安装 Neo4J:一个非常流行的图形数据库,具有许多语言绑定,几乎适用于任何流行的编程语言。
安装 Neo4J
将 Neo4J 密钥添加到 apt 包管理器中:
wget -O - http://debian.neo4j.org/neotechnology.gpg.key | apt-key add -
将 Neo4J 添加到 Apt 源列表:
echo 'deb http://debian.neo4j.org/repo stable/' > /etc/apt/sources.list.d/neo4j.list
更新包管理器:
apt-get update
安装 Neo4J:
apt-get install neo4j
Neo4J 应该正在运行。 您可以使用以下命令进行检查
service neo4j-service status
Neo4J RESTful API 和 Cypher 查询语言
让 Neo4J 很棒的一件事是它有一个非常易于使用的 RESTful API,这意味着它几乎可以被任何可以发出 Web 请求的编程语言使用。 在 Neo4J 数据库上执行的许多操作都是使用 Cypher 查询执行的。 Cypher 查询语言是 Neo4J 用来操作和读取数据的查询语言。 Cypher 之于 Neo4J 就像 SQL 之于 MySQL。
对 Neo4J RESTful API 的 Web 请求的结构如下:
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://SERVERNAME:7474/db/data/cypher -d '{ "query" : "CYPHER QUERY GOES HERE", "params" : { QUERY PARAMETERS GO HERE } }'
将数据添加到 Neo4J
Neo4J 是一个数据库,而数据库需要数据,所以我们来添加一些数据!
创建一个新节点:
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "CREATE (n:Person { name : {name} }) RETURN n", "params" : { "name" : "Foo" } }'
我之前提到过,图形数据库将数据存储为节点和关系。 一个关系需要两个节点,所以让我们创建另一个节点:
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "CREATE (n:Person { name : {name} }) RETURN n", "params" : { "name" : "Bar" } }'
现在我们可以在这两个节点之间建立关系:
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/node/0/relationships -d '{ "to" : "http://localhost:7474/db/data/node/1", "type" : "Comes Before" } }'
使用 Cypher 查询 Neo4J
下面是一些示例密码查询,我们可以使用它来查看我们之前插入的数据。
我们可以从我们创建的第一个节点开始,获取所有连接的节点以及对应的关系:
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "MATCH (x {name: {startName}})-[r]->(n) RETURN type(r), n.name", "params" : { "startName" : "Foo" } }'
返回图中所有节点的 name 属性(注意:这不应该在大图上执行):
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "START n = node(*) return n.name", "params" : { } }'
返回图中的所有关系类型(注意:这不应该在大图上执行):
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "START r=rel(*) return type(r) ", "params" : { } }'
Neo4J RESTful API 提供的更完整的描述和方法列表可以在[[“%3Ca|http://docs.neo4j.org/chunked/milestone/rest-api.html]]找到 [[“%3C/a|”>here]] ,有关 Cypher 查询语言的信息可以在[[“%3Ca|http://docs.neo4j.org/chunked/stable/cypher-query-lang.html]]找到 [[“%3C/a|”>这里]]。