本篇将介绍Neo4j的安装,入门,和本身使用了一段时间后发现的优势缺点,争取简洁和实用。html
若是你是第一次接触Neo4j,而且以前也都没接触过相似的Graph Database的话,建议先浏览一下我以前的一篇博客:为何选择图形数据库,为何选择Neo4j?。毕竟应该在作一件事以前要想清楚为何要作是吧。java
上Neo4j官网,下载community版,点击安装便可。很简单没什么可说的。sql
既然是入门,那就从简单开始,一步一步熟悉Neo4j。mongodb
运行Neo4j后,在浏览器中打开网页:http://localhost:7474, 便可进入Neo4j的图形操做界面,在里面能够直接操做数据库,也能够查看数据库的状态。数据库
页面顶端能够直接写Cypher语句并运行。右侧则显示一些数据库的状态以及提供一部分操做,包括:浏览器
Cypher是Neo4j的数据库语言,入门的话起码得知道增删改查吧。session
CREATE (n:Person { name : 'Andres'});
MATCH (a:Person),(b:Person) WHERE a.name = 'Node A' AND b.name = 'Node B' CREATE (a)-[r:Follow]->(b);
MATCH (n:Person { name: 'Andres' }) SET n.name = 'Taylor';
MATCH (n:Person { name:'Andres' }) DETACH DELETE n;
MATCH (a:Person)-[r:Follow]->(b:Person) WHERE a.name = 'Andres' AND b.name = 'Taylor' DELETE r;
接着就是查询语句了,做为图形数据库,确定要来点不同凡响的查询对吧。ide
MATCH (ms:Person { name:'Andres' }),(cs:Person { name:'Taylor' }), p = shortestPath((ms)-[r:Follow]-(cs)) RETURN p;
MATCH (a:Person { name:'Andres' })-[r]->(b:Person { name:'Taylor' }) RETURN type(r);
MATCH (:Person { name:'Taylor' })-[r:Follow]->(Person) RETURN Person.name;
还有更多的操做能够参考官方用户手册:官方用户手册post
运行Neo4j以后,在软件窗口能够选择数据库建立位置,以后Neo4j就自动为咱们建立好了数据库。性能
CREATE CONSTRAINT ON (a:Person) ASSERT a.name IS UNIQUE;
CREATE INDEX ON :Person(name);
MATCH (n) RETURN count(n); MATCH ()-->() RETURN count(*);
还有更多的操做能够参考官方用户手册:官方用户手册
Neo4j提供了数种语言的数据库驱动,好比在java中,你能够这样插入一个节点:
Driver driver = GraphDatabase.driver( "bolt://localhost", AuthTokens.basic( "neo4j", "neo4j" ) ); Session session = driver.session(); session.run( "CREATE (a:Person {name:'Arthur'})" ); session.close(); driver.close();
查询节点:
Driver driver = GraphDatabase.driver( "bolt://localhost", AuthTokens.basic( "neo4j", "neo4j" ) ); Session session = driver.session(); StatementResult result = session.run( "MATCH (a:Person) WHERE a.name = 'Arthur' RETURN a.name AS name" ); while ( result.hasNext() ) { Record record = result.next(); System.out.println( record.get("name").asString() ); } session.close(); driver.close();
使用了一段时间Neo4j,总结一下我发现的优缺点。
优势:
缺点:
鉴于其明显的优缺点,Neo4j适合存储”修改较少,查询较多,没有超大节点“的图数据。
另外,针对Neo4j的缺点,有一款使用混合索引的数据库Arangodb也许是一个不错的考虑对象。根据其官网的说明,Arangodb不只具备通常图形数据库的优势,并且在各类操做的速度上领先于Neo4j。可见:原理上说明为何Arangodb更快;Arangodb与其余几款数据库的性能对比。