设为首页 - 加入收藏 - 网站地图 SecYe安全 Www.SecYe.Com - 国内网络信息安全IT技术门户网
当前位置:首页 > 数据库 > 数据库理论 > 正文

Neo4j使用说明

时间:2016-09-09 11:03 来源:未知 作者:SecYe安全 阅读:

1. 安装
上Neo4j官网,下载community版,点击安装即可。很简单没什么可说的。

2. 入门
既然是入门,那就从简单开始,一步一步熟悉Neo4j。

2.1 图形操作界面
运行Neo4j后,在浏览器中打开网页:http://localhost:7474, 即可进入Neo4j的图形操作界面,在里面可以直接操作数据库,也可以查看数据库的状态。

页面顶端可以直接写Cypher语句并运行。右侧则显示一些数据库的状态以及提供一部分操作,包括:

    Database Information。数据库信息。节点类别,边的类别,属性(包括节点的属性和边的属性)。
    Favorites。写好的基本数据库语句,包括创建节点,查询节点个数,边个数等。创建示例图。查看数据库的状态。
    Documentation。各种官方文档。
    Neo4j Browser Sync。清空本地数据库。与云端数据库同步。
    Browser Settings。图形操作界面的设置。


2.2 Cypher基本语句
Cypher是Neo4j的数据库语言,入门的话起码得知道增删改查吧。
    插入节点。插入一个Person类别的节点,且这个节点有一个属性name,属性值为Andres

  1. CREATE (n:Person { name : 'Andres'});
复制代码

   插入边。插入一条a到b的有向边,且边的类别为Follow

  1. MATCH (a:Person),(b:Person)
     
  2. WHERE a.name = 'Node A' AND b.name = 'Node B'
     
  3. CREATE (a)-[r:Follow]->(b);
复制代码

   更新节点。更新一个Person类别的节点,设置新的name。
 

  1. MATCH (n:Person { name: 'Andres' })
     
  2. SET n.name = 'Taylor';
复制代码

   删除节点和与其相连的边。Neo4j中如果一个节点有边相连,是不能单单删除这个节点的。
 

  1. MATCH (n:Person { name:'Andres' })
     
  2. DETACH DELETE n;
复制代码

   删除边。
 

  1. MATCH (a:Person)-[r:Follow]->(b:Person)
     
  2. WHERE a.name = 'Andres' AND b.name = 'Taylor'
     
  3. DELETE r;
复制代码

   接着就是查询语句了,作为图形数据库,肯定要来点与众不同的查询对吧。
    最短路径。
 

  1. MATCH (ms:Person { name:'Andres' }),(cs:Person { name:'Taylor' }), p = shortestPath((ms)-[r:Follow]-(cs)) RETURN p;
复制代码

   查询两个节点之间的关系。
 

  1. MATCH (a:Person { name:'Andres' })-[r]->(b:Person { name:'Taylor' })
     
  2. RETURN type(r);
复制代码

   查询一个节点的所有Follower。
 

  1. MATCH (:Person { name:'Taylor' })-[r:Follow]->(Person)
     
  2. RETURN Person.name;
复制代码

还有更多的操作可以参考官方用户手册:官方用户手册

2.3 创建一个Neo4j数据库
运行Neo4j之后,在软件窗口可以选择数据库创建位置,之后Neo4j就自动为我们创建好了数据库。



创建唯一性约束,同时具有索引效果,类似关系型数据库中的主键。注意,这只能在数据库中还未插入数据时设置。
 

  1. CREATE CONSTRAINT ON (a:Person) ASSERT a.name IS UNIQUE;
复制代码

   创建索引。
 

  1. CREATE INDEX ON :Person(name);
复制代码

   查看所有的节点数和边数
 

  1. MATCH (n) RETURN count(n);
     
  2. MATCH ()-->() RETURN count(*);
复制代码

还有更多的操作可以参考官方用户手册:官方用户手册

2.4 Neo4j驱动
Neo4j提供了数种语言的数据库驱动,比如在java中,你可以这样插入一个节点:
 

  1. Driver driver = GraphDatabase.driver( "bolt://localhost", AuthTokens.basic( "neo4j", "neo4j" ) );
     
  2. Session session = driver.session();
     

  3.  
  4. session.run( "CREATE (a:Person {name:'Arthur'})" );
     

  5.  
  6. session.close();
     
  7. driver.close();
复制代码


查询节点:

 

  1. Driver driver = GraphDatabase.driver( "bolt://localhost", AuthTokens.basic( "neo4j", "neo4j" ) );
     
  2. Session session = driver.session();
     

  3.  
  4. StatementResult result = session.run( "MATCH (a:Person) WHERE a.name = 'Arthur' RETURN a.name AS name" );
     
  5. while ( result.hasNext() )
     
  6. {
     
  7.     Record record = result.next();
     
  8.     System.out.println( record.get("name").asString() );
     
  9. }
     

  10.  
  11. session.close();
     
  12. driver.close();
复制代码


3. 优缺点
使用了一段时间Neo4j,总结一下我发现的优缺点。

优点:

1.数据的插入,查询操作很直观,不用再像之前要考虑各个表之间的关系。
2.提供的图搜索和图遍历方法很方便,速度也是比较快的。

缺点:

1.最不能让人忍受的就是极慢的插入速度。可能是因为创建节点和边的时候需要保存一些额外信息(为了查询服务)。不知道是不是我代码的问题,插入10000个节点,10000条边花了将近10分钟...
2.超大节点。当有一个节点的边非常多时(常见于大V),有关这个节点的操作的速度将大大下降。这个问题很早就有了,官方也说过会处理,然而现在仍然不能让人满意。
3.提高数据库速度的常用方法就是多分配内存,然而看了官方操作手册,貌似无法直接设置数据库内存占用量,而是需要计算后为其”预留“内存...

4. 适用场景

鉴于其明显的优缺点,Neo4j适合存储”修改较少,查询较多,没有超大节点“的图数据。

另外,针对Neo4j的缺点,有一款使用混合索引的数据库Arangodb也许是一个不错的考虑对象。根据其官网的说明,Arangodb不仅具有一般图形数据库的优点,而且在各种操作的速度上领先于Neo4j。




 

本文来源:SecYe安全网[http://www.secye.com] (责任编辑:SecYe安全)

点击复制链接 与好友分享!

顶一下
(0)
0%
踩一下
(0)
0%