neo4j 基本概念

参考学习教程

neo4j的数据模型

  1. neo4j cql
  2. 图数据库
  3. 通过apache lucene 索引
  4. 支持unique 约束
  5. 包含一个用于执行 cql 命令的 UI: NEO4J 数据库浏览器
  6. ACID 完整的特性
  7. rest api ,任何编程语言都可以用
  8. UI MVC
  9. 支持2种java api , cypher api 和 native java api

图数据库数据模型的主要构建块是:

  • 节点
  • 关系
  • 属性

image-20210916120055016

image-20210916122351584

java 操作代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
@RelationshipEntity(type="WRITER_OF")
public class WriterOf extends AbstractEntity {
   @StartNode
   private Person writer;

   @EndNode
   private Book book;

   private Date startDate;
   private Date endDate;
   ……
}

@NodeEntity
public class Person extends NamedEntity {
   @Relationship(type="WRITER_OF")
   private Set<WriterOf> writings;

   @Relationship(type="READER_OF")
   private Set<Book> books;
   ……
}

image-20210916132739239

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
select distinct 
a.from_name,
b.from_name,
c.from_name,
d.from_name,
e.from_name
from 
	star_relation a
left join star_relation b on a.from_name = b.from_name
left join star_relation c on b.from_name = c.from_name
left join star_relation d on c.from_name = d.from_name
left join star_relation e on d.from_name = e.from_name
where 
	a.from_name = '郭富城' AND e.from_name = '向华强'

使用 mysql 查询会有非常昂贵的代价, 是 4个笛卡尔积构成的

NEO4j查询

1
return (:Star[name:"郭富城"])-[*..5]->(:Star{name:"向华强"})  limit 50

关系型数据库的核心

  • 节点
  • 关系

练习

1
2
3
4
5
6
7
8
9
create (:pig{name:"猪爷爷",age:15});
create (:pig{name:"猪奶奶",age:13})
// 创建了 猪爷爷和猪奶奶2个标签
// 创建关系
match (a:pig{name:"猪奶奶" }) match(a:pig{name:"猪爷爷" }) create(a)-[r:夫妻]->(b) return r;

create (:pig{name:"猪爸爸",age:12})-[:夫妻{age:5}]->(:pig{name:"猪妈妈",age:9});
match (a:pig{name:"猪爸爸"}) match(b:pig{name:"猪爷爷"}) create (b)-[r:父子]->(a) return r;
                                                                

image-20210916134806092

neo4j 修改操作

1
2
match (n:pig{name:"猪妈妈"}) set n.age=8;
 

最短路径查询

1
match p=allshortestpaths((a:Star{name:"郭富城"})-[*..5]->(b:Star{name:"向华强"}) ) return p;

查找王菲的所有关系

1
return (:Star{name:"王菲"}) -->() limit 50

其他的骚操作

1
2
3
4
//创建多标签节点
create (a🐷die{name:"猪祖夫",age:22}) return a.name;
//删除节点
m