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语句

  • 相关阅读:
    HDU 1009 FatMouse' Trade
    HDU 2602 (简单的01背包) Bone Collector
    LA 3902 Network
    HDU 4513 吉哥系列故事——完美队形II
    LA 4794 Sharing Chocolate
    POJ (Manacher) Palindrome
    HDU 3294 (Manacher) Girls' research
    HDU 3068 (Manacher) 最长回文
    Tyvj 1085 派对
    Tyvj 1030 乳草的入侵
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/9897484.html
Copyright © 2011-2022 走看看