neo4j 基本概念
参考学习教程
neo4j的数据模型
- neo4j cql
- 图数据库
- 通过apache lucene 索引
- 支持unique 约束
- 包含一个用于执行 cql 命令的 UI: NEO4J 数据库浏览器
- ACID 完整的特性
- rest api ,任何编程语言都可以用
- UI MVC
- 支持2种java api , cypher api 和 native java api
图数据库数据模型的主要构建块是:
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;
……
}
|
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;
|
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
|