节点存储
节点是否可用+最近一个关系的Id(-1表示无)+最近一个属性的Id(-1表示无) 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[4,used=true,rel=4,prop=6] Node[5,used=true,rel=5,prop=8] Node[6,used=true,rel=5,prop=10] Node[7,used=true,rel=7,prop=12] Node[8,used=true,rel=8,prop=14] Node[9,used=true,rel=8,prop=16] Node[10,used=true,rel=10,prop=18] Node[11,used=true,rel=11,prop=20] Node[12,used=true,rel=11,prop=22]
关系存储
是否可用+关系的头节点+关系的尾节点+关系类型+头节点的前一个关系Id+头节点的后一个关系id+尾节点的前一个关系Id+尾节点的后一个关系Id+关系的最近属性Id Relationship[0,used=true,source=1,target=0,type=0,sPrev=1,sNext=-1,tPrev=3,tNext=-1,prop=1] Relationship[1,used=true,source=2,target=1,type=1,sPrev=2,sNext=-1,tPrev=-1,tNext=0,prop=3] Relationship[2,used=true,source=3,target=2,type=2,sPrev=-1,sNext=-1,tPrev=-1,tNext=1,prop=5] Relationship[3,used=true,source=4,target=0,type=0,sPrev=4,sNext=-1,tPrev=6,tNext=0,prop=7] Relationship[4,used=true,source=5,target=4,type=1,sPrev=5,sNext=-1,tPrev=-1,tNext=3,prop=9] Relationship[5,used=true,source=6,target=5,type=2,sPrev=-1,sNext=-1,tPrev=-1,tNext=4,prop=11] Relationship[6,used=true,source=7,target=0,type=0,sPrev=7,sNext=-1,tPrev=9,tNext=3,prop=13] Relationship[7,used=true,source=8,target=7,type=1,sPrev=8,sNext=-1,tPrev=-1,tNext=6,prop=15] Relationship[8,used=true,source=9,target=8,type=2,sPrev=-1,sNext=-1,tPrev=-1,tNext=7,prop=17] Relationship[9,used=true,source=10,target=0,type=0,sPrev=10,sNext=-1,tPrev=-1,tNext=6,prop=19] Relationship[10,used=true,source=11,target=10,type=1,sPrev=11,sNext=-1,tPrev=-1,tNext=9,prop=21] Relationship[11,used=true,source=12,target=11,type=2,sPrev=-1,sNext=-1,tPrev=-1,tNext=10,prop=23]
属性存储
是否可用+前一个属性Id+后一个属性Id+属性块32个字节 Property[10,used=true,prev=-1,next=9,PropertyBlock[INT,key=7,value=5]]
文件结构
测试环境:
1. 操作系统: Mac OS X 10.10.5
2. 内存: 8G
3. CPU参数: 8核8线程
4. 编程语言: python 2.7
5. Neo4j 版本: 3.3.0
6. 服务器节点数: 单点
测试内容: 节点数分别在1万, 10万, 100万,1000万情况下,在节点设置索引和不设置索引的情况下查找节点的平均延时。测试结果如下:
7.1000万节点的情况下有索引和无索引插入延时测试:
https://blog.csdn.net/qq_37242224/article/details/81325625
https://neo4j.com/developer/guide-sql-to-cypher/
SELECT p.ProductName, p.UnitPrice FROM products as p ORDER BY p.UnitPrice DESC LIMIT 10;
MATCH (p:Product) RETURN p.productName, p.unitPrice ORDER BY p.unitPrice DESC LIMIT 10;
运算符
语句
函数
LOAD CSV
一、有大量存量数据(亿级以上)(并长期有增量数据进入)
1、使用NEO4J + ELASTICSEARCH(Neo4j提供ES插件,类似还有Apache Spark、MongoDB、Cassandra插件等)
二、无大量存量数据或者少量存量数据(或全部为增量数据)
1、建立全文检索之后,设置索引同步更新即可(对于大量数据的索引重建比较费时)。
2、建立全文检索之后(使用自定义支持中文的全文索引过程),设置增量入库数据同步更新到索引即可(索引的重建如果做不好优化将会比较费时)。
org.springframework.boot spring-boot-starter-data-neo4j