分享

图形数据库neo4j分享

xioaxu790 发表于 2014-8-14 18:31:15 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 9576
问题导读
1、neo4j 提供哪三种查询方法?
2、neo4j如何创建各基本元素?




由于项目需要首次使用neo4j,个人觉得Neo4j确保了在一个事务里面的多个操作同时发生,保证数据一致性。不管是采用嵌入模式还是多服务器集群部署,都支持这一特性。

1.neo4j各类基本元素
  节点---在Neo4j中,节点和关系都可以有自己特有的属性。
  关系---节点之间的关系是图数据库很重要的一部分。通过关系可以找到很多关联的数据,比如            节点集合,关系集合以及他们的属性集合。
  属性---属性是由Key-Value键值对组成,键名是字符串。属性值是要么是原始值,要么是原始值类型的一个数组。比如string,int 和int[]都是合法的。
  索引---给某一类资源节点,或者关系,创建一个索引在添加数据的同时,添加索引.这样可以在查询数据的时候很方便,效率不错.
例如定义以下关系


2.创建各基本元素
  节点:
  1.    // 创建根节点
  2.             refRootNode = createNode(referenceNode, CustomerRelationshipType.REF_ROOT, "REF_ROOT");
  3.             // 创建行政区划节点
  4.             refAreaNode = createNode(refRootNode, CustomerRelationshipType.REF_AREA, "行政区划");
  5.             // 创建站点节点
  6.             refStationNode = createNode(refRootNode, CustomerRelationshipType.REF_STATION, "站点");
复制代码



  关系:定义所有会使用的RelationshipType,关系类型.例如:
  1.   public enum CustomerRelationshipType implements RelationshipType {
  2.       REF_ROOT,REF_AREA,REF_STATION
  3.   }
复制代码


  //创建关系
  1.        node = neo.createNode();
  2.        refAreaNode.createRelationshipTo(node, CustomerRelationshipType.REF_AREA);
复制代码



  属性:
  1. //节点添加属性
  2.    areaIndex = indexManager.forNodes("area");
  3.    this.setNodeProperty("name", name);
  4.    areaIndex.add(underlyingNode, "name", name);
复制代码


  索引:注意更新属性同时要更新索引时,要删除再添加
  1. / create a node with a property
  2. // so we have something to update later on
  3. Node fishburn = graphDb.createNode();
  4. fishburn.setProperty( "name", "Fishburn" );
  5. // index it
  6. actors.add( fishburn, "name", fishburn.getProperty( "name" ) );
  7. // update the index entry
  8. // when the property value changes
  9. actors.remove( fishburn, "name", fishburn.getProperty( "name" ) );
  10. fishburn.setProperty( "name", "Laurence Fishburn" );
  11. actors.add( fishburn, "name", fishburn.getProperty( "name" ) );
复制代码



//索引
  1. IndexManager index = graphDb.index();
  2. Index<Node> actors = index.forNodes( "actors" );
  3. Index<Node> movies = index.forNodes( "movies" );
  4. RelationshipIndex roles = index.forRelationships( "roles" );
复制代码



3.基本的几个方法如上述2.
还有是最好将真的neo4j操作的方法封装好然后调用
因为如果有数据同步,或者其他操作的时候.使用使用法会太频繁.
  1. public interface Station extends Serializable{
  2.     /**
  3.      * @return the code
  4.      */
  5.     String getCode();
  6.     /**
  7.      * @return the id
  8.      */
  9.     String getId();
  10.     /**
  11.      * @return the name
  12.      */
  13.     String getName();
  14.    
  15.      Area getArea();
  16.    
  17.     void setArea(String area,Node node);
  18.    
  19.     StationType getType();
  20.    
  21.     void setType(String type,Node node);
  22.     /**
  23.      * @param code the code to set
  24.      */
  25.     void setCode(String code);
  26.     /**
  27.      * @param id the id to set
  28.      */
  29.     void setId(String id);
  30.     /**
  31.      * @param name the name to set
  32.      */
  33.     void setName(String name);
  34.    
  35.     void remove();
  36.    
  37.     String getStationUrl(UriInfo uriInfo);
  38.    
  39.      String getRoomsUrl(UriInfo uriInfo);
  40.      
  41.      String getFibersUrl(UriInfo uriInfo);
  42.      
  43.      JSONObject toJSON(UriInfo uriInfo);
  44. }
复制代码



neo4j 提供三种查询方法:
1、使用查询方法以及索引查询指定类型数据
2、遍历查询框架
3、类似SQL的 Cypher查询语言(neo4j-enterprise-1.8.1工具)
从性能上来说 1 优于2, 2 优于 3
根据属性名称查询:
  1.   private Node findStaTypeNodeByName(String value) {
  2.         Index<Node> areaIndex = neo.index().forNodes("statype");
  3.         Node node = areaIndex.get("name", value).getSingle();
  4.         if (null == node) {
  5.             return null;
  6.         }
  7.         return node;
  8.     }
复制代码



查询全部区域:
  1. public List<Area> findAllArea() {
  2.         List<Area> result = new ArrayList<Area>();
  3.         Iterable<Relationship> rs = refAreaNode.getRelationships(CustomerRelationshipType.AREA, Direction.OUTGOING);
  4.         for (Relationship r : rs) {
  5.             Node node = r.getEndNode();
  6.             Area area = new AreaImpl(node);
  7.             result.add(area);
  8.         }
  9.         return result;
  10.     }
复制代码


本人是也刚刚学习,总结一下学习过程,希望对有需求的朋友有帮助.
Neo4j中文API地址:http://www.neo4j.org.cn/old-docs/  






本文转载自:http://f.dataguru.cn/thread-344859-1-1.html#userconsent#

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条