zoukankan      html  css  js  c++  java
  • Graph database_neo4j 底层存储结构分析(2)

    3       neo4j存储结构

    neo4j 中,主要有4类节点,属性,关系等文件是以数组作为核心存储结构;同时对节点,属性,关系等类型的每个数据项都会分配一个唯一的ID,在存储时以该ID 为数组的下标。这样,在访问时通过其ID作为下标,实现快速定位。所以在图遍历等操作时,可以实现 free-index。

    3.1  neo4j 的 store 部分类图

    neo4j-类图--store继承图

    3.1.1   CommonAbstractStore.java

    CommonAbstractStore 是所有 Store 类的基类,下面的代码片段是 CommonAbstractStore 的成员变量,比较重要的是飘红的几个,特别是IdGenerator,每种Store 的实例都有自己的 id 分配管理器; StoreChannel 是负责Store文件的读写和定位;WindowsPool 是与Store Record相关的缓存,用来提升性能的。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    </pre>
    <div>public abstract class CommonAbstractStore implements IdSequence
     
    {
     
    public static abstract class Configuration
     
    {
     
    public static final Setting store_dir = InternalAbstractGraphDatabase.Configuration.store_dir;
     
    public static final Setting neo_store = InternalAbstractGraphDatabase.Configuration.neo_store;
     
    public static final Setting read_only = GraphDatabaseSettings.read_only;
     
    public static final Setting backup_slave = GraphDatabaseSettings.backup_slave;
     
    public static final Setting use_memory_mapped_buffers = GraphDatabaseSettings.use_memory_mapped_buffers;
     
    }
     
    public static final String ALL_STORES_VERSION = "v0.A.2";
     
    public static final String UNKNOWN_VERSION = "Uknown";
     
    protected Config configuration;
     
    private final IdGeneratorFactory idGeneratorFactory;
     
    private final WindowPoolFactory windowPoolFactory;
     
    protected FileSystemAbstraction fileSystemAbstraction;
     
    protected final File storageFileName;
     
    protected final IdType idType;
     
    protected StringLogger stringLogger;
     
    private IdGenerator idGenerator = null;
     
    private StoreChannel fileChannel = null;
     
    private WindowPool windowPool;
     
    private boolean storeOk = true;
     
    private Throwable causeOfStoreNotOk;
     
    private FileLock fileLock;
     
    private boolean readOnly = false;
     
    private boolean backupSlave = false;
     
    private long highestUpdateRecordId = -1;

    1.2  neo4j 的db文件及对应的存储格式类型

    文件名 文件存储格式
    neostore.labeltokenstore.db LabelTokenStore(TokenStore)
    neostore.labeltokenstore.db.id ID 类型
    neostore.labeltokenstore.db.names StringPropertyStore (AbstractDynamicStore, NAME_STORE_BLOCK_SIZE = 30)
    neostore.labeltokenstore.db.names.id ID 类型
    neostore.nodestore.db NodeStore
    neostore.nodestore.db.id ID 类型
    neostore.nodestore.db.labels ArrayPropertyStore (AbstractDynamicStorelabel_block_size=60)
    neostore.nodestore.db.labels.id ID 类型
    neostore.propertystore.db PropertyStore
    neostore.propertystore.db.arrays ArrayPropertyStore (AbstractDynamicStorearray_block_size=120)
    neostore.propertystore.db.arrays.id ID 类型
    neostore.propertystore.db.id ID 类型
    neostore.propertystore.db.index PropertyIndexStore
    neostore.propertystore.db.index.id ID 类型
    neostore.propertystore.db.index.keys StringPropertyStore (AbstractDynamicStore, NAME_STORE_BLOCK_SIZE = 30)
    neostore.propertystore.db.index.keys.id ID 类型
    neostore.propertystore.db.strings StringPropertyStore (AbstractDynamicStorestring_block_size=120)
    neostore.propertystore.db.strings.id ID 类型
    neostore.relationshipgroupstore.db RelationshipGroupStore
    neostore.relationshipgroupstore.db.id ID 类型
    neostore.relationshipstore.db RelationshipStore
    neostore.relationshipstore.db.id ID 类型
    neostore.relationshiptypestore.db RelationshipTypeTokenStore(TokenStore)
    neostore.relationshiptypestore.db.id ID 类型
    neostore.relationshiptypestore.db.names StringPropertyStore (AbstractDynamicStore, NAME_STORE_BLOCK_SIZE = 30)
     neostore.relationshiptypestore.db.names.id ID 类型
    neostore.schemastore.db SchemaStore(AbstractDynamicStore, BLOCK_SIZE = 56)
    neostore.schemastore.db.id ID 类型
  • 相关阅读:
    IOS开发中Xcode常用插件安装与管理(转)
    IOS开发中摇一摇是怎么实现的
    IOS中APP开发常用的一些接口
    数据结构——不相交集(并查集)
    数据结构——(最小)堆(完全二叉树)
    JDK1.7 中的HashMap源码分析
    Java中hashCode()方法以及HashMap()中hash()方法
    《Java多线程核心技术》读书摘要
    Java for LeetCode 237 Delete Node in a Linked List
    Java类变量、实例变量的初始化顺序
  • 原文地址:https://www.cnblogs.com/gisblogs/p/4545746.html
Copyright © 2011-2022 走看看