Graph database_neo4j 底层存储结构分析(2)
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 类型 |