zoukankan      html  css  js  c++  java
  • Neo4J简单了解

    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

  • 相关阅读:
    最高效的无限级菜单生成方法
    MySQL性能优化的最佳20+条经验(转)
    Web应用中的轻量级消息队列
    Delphi Setlength 内存释放总结
    Delphi 的TSpeedButton按下和弹起效果
    Delphi存取图像完整解决方案
    delphi 开机自动运行代码
    有关时间限制使用和软件注册的设计(delphi)
    Linux环境thinkphp配置以及数据源驱动改动
    Dalvik和ART简单介绍
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/10117845.html
Copyright © 2011-2022 走看看