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 类型 |

浙公网安备 33010602011771号