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