neo4j
简介
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注.
安装
普通安装
首先在 https://neo4j.com/download/ 下载Neo4J。Neo4J分为社区版和企业版,企业版在横向扩展、权限控制、运行性能、HA等方面都比社区版好,适合正式的生产环境,普通的学习和开发采用免费社区版就好。
在Mac或者Linux中,安装好jdk后,直接解压下载好的Neo4J包,运行bin/neo4j start
即可
docker安装
-
docker pull neo4j
-
docker run -d --name cch_neo4j \ -p 7474:7474 -p 7687:7687 \ -v /Users/caochuanhong/opt/docker/neo4j/data:/data \ -v /Users/caochuanhong/opt/docker/neo4j/logs:/logs \ -v /Users/caochuanhong/opt/docker/neo4j/conf:/var/lib/neo4j/conf \ -v /Users/caochuanhong/opt/docker/neo4j/import:/var/lib/neo4j/import \ --env NEO4J_AUTH=neo4j/password=123456 neo4j
-
开启允许远程登陆
- 打开neo4j.conf文件
- 添加或修改以下配置:
//指定连接器的默认监听ip为0.0.0.0,即允许任何ip连接到数据库 dbms.connectors.default_listen_address=0.0.0.0 //对bolt请求的监听地址 dbms.connector.bolt.listen_address=0.0.0.0:7687 //对http请求的监听地址 dbms.connector.http.listen_address=0.0.0.0:7474
-
-
输入用户名和密码 neo4j/123456
-
语法
-
() :最简单的节点形式,表示一个任意无特征的节点,其实就是一个空节点
-
(matrix) :如果想指向一个节点在其他地方,我们可以给节点添加一个变量名(matrix)。变量名被限制单一的语句里,一个变量名在不同的语句中可能有不同的意义,或者没意义
-
(:Movie) :添加标签名称
-
(matrix:Movie) :一个节点有一个标签名(Movie),并且把它分配到变量matrix上,节点的标签(被定义在:后),用于声明节点的类型或者角色。注意节点可以有多个标签。标签被用于 限制搜索pattern, 保留他们在匹配结构中,不使用标签在query里。
(matrix:Movie {title: “The Matrix”}) :花括号里定义节点的属性,属性都是键值对
(matrix:Movie {title: “The Matrix”, released: 1999}) :多个属性
(matrix:Movie:Promoted) :多个标签
创建节点
CREATE (变量:标签 {json属性}),例如
CREATE (user:User {id:1,name:"张三",sex:"男"})
更新节点
MATCH(n:User) WHERE n.name="张三" SET n.sex = "女"
删除节点
-
删除所有,两种方式都可以
MATCH (n) DETACH DELETE n
MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r
-
删除指定节点
MATCH(n) WHERE ID(n)=1 DELETE n
创建关系
- 从已有的节点中创建连接
MATCH(a:Node),(b:Node) WHERE ID(a)=230 AND ID(b)=231 CREATE (b)-[:R]->(a)
- 创建新节点并创建关系
CREATE (user1:User {name:"张三",sex:"男"}),(user2:User {name:"李四",sex:"男"}),(user3:User {name:"王五",sex:"男"}),(user1)-[:FRIENDS {id:1,since:2001}]->(user2),(user2)-[:FRIENDS {id:2,since:2002}]->(user3)
Neo4j Connector for Apache Spark
Apache Spark 的 Neo4j 连接器旨在使图形与 Spark 的集成变得容易。有两种有效的使用连接器的方法:
- 作为数据源:在 Spark 中将任何一组节点或关系作为 DataFrame 读取
- 作为接收器:将任何 DataFrame 作为节点或关系的集合写入 Neo4j,或者;使用 Cypher 语句将 DataFrame 中的记录处理为您选择的图形模式。
连接器下载
Maven方式安装驱动
<dependency>
<groupId>neo4j-contrib</groupId>
<artifactId>neo4j-connector-apache-spark_2.12</artifactId>
<version>4.0.0</version>
</dependency>
如果jar无法下载,可以通过手动复制的方式将下载好的jar包安装maven库格式copy到相应的库地址中
读取所有类型为 Person 的节点
import org.apache.spark.sql.{SaveMode, SparkSession}
val spark = SparkSession.builder().getOrCreate()
val df = spark.read.format("org.neo4j.spark.DataSource")
.option("url", "bolt://localhost:7687")
.option("authentication.basic.username", "neo4j")
.option("authentication.basic.password", "neo4j")
.option("labels", "Person")
.load()
将 DataFrame 写入 Person 类型的节点
import org.apache.spark.sql.{SaveMode, SparkSession}
val spark = SparkSession.builder().getOrCreate()
import spark.implicits._
val df = Seq(
("John Doe"),
("Jane Doe")
).toDF("name")
df.write.format("org.neo4j.spark.DataSource")
.mode(SaveMode.ErrorIfExists)
.option("url", "bolt://localhost:7687")
.option("authentication.basic.username", "neo4j")
.option("authentication.basic.password", "neo4j")
.option("labels", ":Person")
.save()