初识图数据库:neo4j

图数据库是什么

在计算机科学中,图数据库(英语:graph database,GDB)是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。

图数据库是一种非关系型数据库,以解决现有关系数据库的局限性。图模型明确地列出了数据节点之间的依赖关系,而关系模型和其他NoSQL数据库模型则通过隐式连接来链接数据。图数据库从设计上,就是可以简单快速地检索难以在关系系统中建模的复杂层次结构的。
图数据库wiki

应用

  • 百度自主研发的原生图数据系统(BGraph),在百度的知识图谱系统中应用和实践多年,支撑数以亿计的实体并支撑数以万计的查询 QPS,用于知识问答、搜索推荐和知识推理等。
  • 全历史查询历史人物的关系图谱,分析两个历史文化名词之间的联系途径

开源数据库

Neo4J

开源,支持ACID,具有用于企业部署的高可用性集群,并附带基于Web的管理工具,包括完整事务支持和可视节点链接图浏览器;可以使用其内置的REST Web API接口从大多数编程语言访问,以及使用官方驱动程序的专有Bolt协议;截至2019年1月最受欢迎的图数据库

Cypher

  • Cypher4.0 is a graph query language that is used to query the Neo4j Database. Just like you use SQL to query a MySQL database, you would use Cypher to query the Neo4j Database.

查询示例

1
2
3
4
5
6
# 查询“发行时间在2010后的影片及与其关系为执导的人物信息”
p 人物
d 关系
m 影片

neo4j$ MATCH (p:Person)-[d:DIRECTED]-(m:Movie) where m.released > 2010 RETURN p,d,m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 前二十个 人物节点
MATCH (p:Person) RETURN p limit 20
# 前二十个任意类型节点及其关系
MATCH (n) RETURN n limit 20

# 创建人物顶点
Create (p:Person {name: 'xxx'}) RETURN p

# 创建关系
MATCH (p:Person), (m:Movie)
WHERE p.name = "xxx" and m.title = "Cloud Atlas"
CREATE (p)-[w:WATCHED]->(m)
RETURN type(w)

# 关系查询
MATCH (p:Person)-[r:REVIEWED]-(m:Movie) return p,r,m;
MATCH (p:Person)-[w:WATCHED]-(m:Movie) where p.name="xxx" RETURN p,w,m

... ...

更多查询语句见 Cypher4.0 文档