1 图数据库
与传统数据库不同,图数据库在底层用图的方式存储用户定义的节点和关系。因此,在查询两个节点的联系时,可以在图上从其中一个节点开始,通过表示节点与节点之间关系的线段,到达另一节点,根据这一过程中经过的节点与关系,得到两个节点之间的联系。因此,图数据库可以高效地处理复杂网络关系。
2 Neo4j 的特点
2.1 特点
- 在创建节点的同时建立关系
- 时间复杂度在常数级别
- 基于JVM实现
- 有事务机制
2.2 优点
- 数据插入和查询直观,不需要考虑表之间的联系
- 查询的时间复杂度低,速度快
- 有效避免并行冲突的问题
2.3 缺点
- 插入数据速度极慢
- 当某个节点的边特别多时,对于该节点的操作速度会大大下降
3 Neo4j 的应用
适用于修改较少,查询较多,没有超大节点(即连接的边特别多的节点)的图数据。如社交网络,推荐引擎等等。
4 Neo4j 的使用
4.1 安装
在官网上下载 Neo4j Desktop 并完成安装
4.2 创建数据库
新建 project,点击“add graph”,选择“Create a Local Graph”,输入图数据库名和密码,点击“Create”,然后点击“Start”
当出现如上图的界面时,点击“Manage”,会出现如下图所示的界面,选择“Open Folder”,查看安装目录
选择“Open Browser”,在浏览器中打开
4.3 使用cypher语言
4.3.1 创建节点
create( a : Person { name : 'gtx' , number : 123456 , age : 22 } )
创建标签为 Person(即节点类型),属性 name 值为 gtx,属性number 值为123456,属性 age 为22的节点
create( b : Course { name : 'Advanced Web Tecnology' , teacher : 'dky' } )
创建标签为 Cource,属性 name 值为 Advanced Web Tecnology,属性teacher 值为 dky 的节点
4.3.2 创建关联
match(a),(b) where a.name='gtx' and b.name="Advanced Web Technology" create ( a ) - [ r : Take ] -> ( b ) return a,b
创建特点节点之间的关联,该关联标签为Take
4.3.3 查询
match ( a ) - [ r : Take ] -> ( b ) where a.number = 15302010048 return a , b
查询与number属性为15302010048的节点有Take关联的节点,返回节点本身和关联节点
返回值同上
4.3.4 修改属性值
start n = node( * ) where n.name = "gtx" set n.age = 23 return n
把 name 属性值为 gtx 的 age 属性值改为23
4.3.5 删除节点与关联
不能单独删除有关联的节点,必须先删除关联或同时删除节点与其所有关联
match ( a ) - [ r ] -> ( b ) where a.number = 123456 delete a , r
删除 number 属性为 123456 的节点及其所有关联
start n = node( * ) return n
显示所有节点,确认属性为 123456 的节点及其所有关联已被删除