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 类型 |
Graph database_neo4j 底层存储结构分析(2)的更多相关文章
- Graph database_neo4j 底层存储结构分析(8)
3.8 示例1:neo4j_exam 下面看一个简单的例子,然后看一下几个主要的存储文件,有助于理解<3–neo4j存储结构>描述的neo4j 的存储格式. 3.8.1 neo4j ...
- Graph database_neo4j 底层存储结构分析(7)
3.7 Relationship 的存储 下面是neo4j graph db 中,Relationship数据存储对应的文件: neostore.relationshipgroupstore.db ...
- Graph database_neo4j 底层存储结构分析(6)
3.6 Node 数据存储 neo4j 中, Node 的存储是由 NodeStore 和 ArrayPropertyStore 2中类型配合来完成的. node 的label 内容是存在Array ...
- Graph database_neo4j 底层存储结构分析(5)
3.5 Property 的存储 下面是neo4j graph db 中,Property数据存储对应的文件: neostore.propertystore.db neostore.propertys ...
- Graph database_neo4j 底层存储结构分析(1)
1 neo4j 中节点和关系的物理存储模型 1.1 neo4j存储模型 The node records contain only a pointer to their first pr ...
- Graph database_neo4j 底层存储结构分析(4)
3.3.2 DynamicStore 类型 3.3.2.1 AbstractDynamicStore 的存储格式 neo4j 中对于字符串等变长值的保存策略是用一组定长的 block ...
- Graph database_neo4j 底层存储结构分析(3)
3.3 通用的Store 类型 3.3.1 id 类型 下面是 neo4j db 中,每种Store都有自己的ID文件(即后缀.id 文件),它们的格式都是一样的. [test00]$ls - ...
- Redis(一) 数据结构与底层存储 & 事务 & 持久化 & lua
参考文档:redis持久化:http://blog.csdn.net/freebird_lb/article/details/7778981 https://blog.csdn.net/jy69240 ...
- HBase底层存储原理
HBase底层存储原理——我靠,和cassandra本质上没有区别啊!都是kv 列存储,只是一个是p2p另一个是集中式而已! 首先HBase不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数 ...
随机推荐
- [软件]在浏览器里添加MarkDown Here(插件)
1. 先来说说这个插件的作用是什么: 用于在网页一些编辑文本的地方, 使用MacDown编辑文本 支持大部分浏览器, https://github.com/adam-p/markdown-here ...
- 玩转Hook——Android权限管理功能探讨(一)
随着Android设备上的隐私安全问题越来越被公众重视,恶意软件对用户隐私,尤其是对电话.短信等私密信息的威胁日益突出,各大主流安全软件均推出了自己的隐私行为监控功能,在root情况下能有效防止恶意软 ...
- 第10月第1天 iOS crash
1. find /Applications/Xcode6.1.app -name symbolicatecrash -type f tempdeMac-mini:crash temp$ dwarfdu ...
- 洛谷 P2089 烤鸡
看了前面大佬的代码,发现这道题的解题思路都大同小异. 首先肯定要定义一个变量累加方案数量,因为方案数量要最先输出,所以所有方案要先储存下来.个人不喜欢太多数组,就只定义一个字符串. 然后我们发现只有1 ...
- Memcached命令:简单获取缓存value用法
Memcached:命令用法1.cmd 输入telnet ip 端口 进入memcached服务端窗口比如:xxx.Token_T1435622096xxx为key获取此key的memcached ...
- (F - 超级英雄Hero HYSBZ - 1191 )匈牙利算法
题目链接:https://cn.vjudge.net/contest/281037#problem/F 题目大意:中文题目 具体思路:可以看成二分图匹配,寻找最大匹配就可以了,注意当某一个匹配不到的时 ...
- python爬虫:抓取下载电影文件,合并ts文件为完整视频
目标网站:https://www.88ys.cc/vod-play-id-58547-src-1-num-1.html 反贪风暴4 对电影进行分析 我们发现,电影是按片段一点点加载出来的,我们分别抓取 ...
- c++ 函数指针简单实例
一开始看函数指针的时候我是很懵的,因为不知道它有什么用,之后慢慢就发现了自己的愚昧无知. 假设我们想实现一个数据结构,比如二叉搜索树,堆.又或者是一个快排,归并排序. 我们一般是直接在两个数要比较的时 ...
- HDU 6395 Sequence 杜教板子题
题目意思非常明确,就是叫你求第n项,据我们学校一个大佬说他推出了矩阵,但是我是菜鸡,那么肯定是用简单的方法水过啦!我们先p^(1/2)的复杂度处理出i=[i,p]范围内的所有种类的(int)(p/i) ...
- os_cpu_a.asm
在OS_CPU_A.ASM中,定义了开.关中断的方法,在uC/OS-II系统中有三种方法可以实现中断开关,而ARM只适用于模式三,即使用一个局部变量,在中断进入之间保存CPU状态,退出时候再恢复状态. ...