1、什么是Neo4j
Neo4j是由java实现的开源NOSQL图数据库 数据库分为关系型和非关系型两种类型。 其中非关系型又分为Graph(图形),Document(文档),Cloumn Family(列式),以及Key-Value Store(KV), 这四种类型数据库分别使用不同的数据结构进行存储。因此它们所适用的场景也不尽相同。 特点: 1、界面友好: 前端D3.js 2、查询语言: Cypher 3、ACID事务 A、体系结构: Neo4j最初的动机是为了更好的描述实体之间的联系 1、免索引邻接 (1)免索引邻接使用遍历物理关系的方法查找,比起全局索引代价要小的多 (2)当索引建立后,反向遍历时,索引就会失效 所以免索引邻接机制,使得图库上关系查询效率非常高 B、存储结构: 节点和关系都是采用固定长度存储。 (1)节点(Node) 包含一个和多个属性(properties),标签(Label) 长度: 9字节 存储文件名:neostore.nodestore.db 格式:Node:inUse+newRelId+newPropId inUse: 1表示该节点呗正常使用,0表示该节点被删除 nextRelId: 该节点的下一个关系ID nextPropId: 该节点的下一个属性ID 示例数据: Node[0,used=true,rel=9,prop=-1] Node[1,used=true,rel=1,prop=0] Node[2,used=true,rel=2,prop=2] Node[3,used=true,rel=2,prop=4] 数据解释: Node[12,used=true,rel=11,prop=22]采用固定字节长度的记录可以快速地查询到存储文件中的节点。 如果有个ID为100的节点。我们知道该记录在存储文件的第900个字节。基于这种查询方式,查询成本是O(1) (2)关系(Relationship) 包含起始节点(startNode)和终止节点(endNode),一个和多个属性,标签,一个类型 长度: 33字节 存储文件名: neostore.relationshipstore.db 格式: Relationship:inUse+firstNode+secondNode+relType+firstPreRelId+firstNextRelId+secondPrevRelId+secondNextRelId+nextPropId inUse:,nextPropId: 作用同上。 firstNode: 当前关系的起始节点。 secondNode: 当前关系的终止节点。 relType: 关系的类型。 firstPrevRelId & firstNextRelId: 起始节点的前一个和后一个关系的ID。 secondPrevRelId & secondNextRelId: 终止节点的前一个和后一个关系ID。 数据解释: Relationship[0,used=true,source=1,target=0,type=0,sPrev=1,sNext=-1,tPrev=3,tNext=-1,prop=1] Relationship[0,used=true,source=2,target=1,type=1,sPrev=2,sNext=-1,tPrev=-1,tNext=0,prop=3] (3)属性(property) 长度:9字节 存储文件名:neostore.propertystore.db.index 格式:property:inUse+propCount+keyBlockId 属性索引的值部分存储的是指向动态内存的记录或者内联值,短字符串和短数组会直接内联在属性存储记录中。当长度超过属性记录中propBlock长度限制之后 会存储到其他的动态存储文件中 C、遍历方式 从一个给定节点定位关系链中第一个关系的位置,然后计算它在关系存储的偏移量获取,使用关系ID乘关系的固定大小即可定位存储文件中的正确位置 在关系记录中,搜索第二个字段可以找第二个节点的ID,用节点固定大小乘节点ID可以得到节点在存储中的正确位置 D、存储优化 尽量将短字符的属性直接存储在属性文件中,压缩和内联存储Neo4j的安装
批量导入工具的使用
Cypher语句
java工具github:spring-data-neo4j