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