whyname 2019-12-31
概述
传统的关系型数据库(RDBMS)如 MySQL,Oracle 因其存储引擎和事务的高一致性特性很难在高并发的情况下实现高吞吐和可扩展,因而产生了很多的NoSQL 数据库如 Redis,MongoDB,Hbase等,图形化数据库(GDBMS) Neo4j因其是把数据以图的形式存储在网络而不是磁盘,所以读写性能较好。
优势
在创建节点的时候就已经把关系给建立起来,避免了在复杂查询场景下的处理
由于底层直接以图的形式存储节点和关系,在查询的时候可以使时间复杂度保持在常数级别。
基于JVM实现
提供一套易于理解的查询语言Cypher以及内置的可视化UI
很好的支持ACID,有事务机制
使用场景
社交网络
基于图的搜索
推荐引擎
企业基础设施及网络架构等
重要概念
Property Graph Model:属性图模型,图形数据库是以属性图模型来记录各节点的属性和关系
Nodes:节点,是用来描述一个对象实例,包含了该对象的属性特征,用圆括号()来表示节点
Relationships:关系,用短箭头‘—>’或不带箭头的’–’短横线来定向描述或不做定向描述的指明节点与节点之间的关系,关系可以有自己的属性特征,用方括号[ ]来表示关系
Properties:属性,属性非常类似数据库里面的字段,只有节点和关系可以拥有0到多个属性,属性类型基本和java的数据类型一致,分为 数值,字符串,布尔,以及其他的一些类型,字段名必须是字符串,用花括号{}来表示属性
Labels:标签,标签通过形容一种角色或者给节点加上一种类型,一个节点可以有多个类型,通过类型区分一类节点,这样在查询时候可以更加方便和高效
Traversal:遍历,查询时候通常是遍历图谱然后找到路径,在遍历时通常会有一个开始节点,然后根据cpyher提供的查询语句,遍历相关路径上的节点和关系,从而得到最终的结果
Paths:路径,路径是一个或多个节点通过关系连接起来的产物,例如得到图谱查询或者遍历的结果。
简单使用
CREATE:关键字,创建节点
CREATE (a:b{name:’zhangshan’,age:’17’}),a为节点名称,b 为节点类型
MATCH:关键字,匹配
MATCH(a:b{name:’zhangshan’})
MERGE: 关键字,指明关系
MATCH(a:b{name:’zhangshan’})
MERGE(a)-[:LIKES{since:’2016’}]->(c:d{name:’basketball’}) 指明a和c 的关系为LIKE
查询节点:MATCH …RETURN…
返回所有喜欢basketball的标签为b的节点 MATCH (B:b)-[:LIKES]->(:d{name:’baseketball’} RETURN B;