Graph database_neo4j 底层存储结构分析(8)
2015-06-02 10:44
459 查看
3.8 示例1:neo4j_exam
下面看一个简单的例子,然后看一下几个主要的存储文件,有助于理解<3–neo4j存储结构>描述的neo4j 的存储格式。3.8.1 neo4j_exm 代码
下面我们看几个主要的存储文件,来帮助我们对 neo4j 的存储格式有个直观的认识。
为了看文件的内容,笔者用二进制方式打开neo4j_exam的db存储文件,并用虚拟打印机输出到pdf 文件,并根据每个文件的格式,进行了着色。
3.8.2 neostore.nodestore.db.id 的内容
打开neo4j_exam的neostore.nodestore.db.id文件看到如下内容:id 文件的header 部分: sticky 值是0, nextFreeId是3,目前已回收可复用的 ID 是 02。
3.8.3 neostore.nodestore.db 的内容
从neo4j_exam的neostore.nodestore.db文件内容可以看到,文件中保存了有 3 条node record 几率的数组和一个字符串“NodeStore v0.A.2”(文件类型描述TYPE_DESCRIPTOR和 neo4j 的 ALL_STORES_VERSION构成)。
其中3 条 node record 的内容如下:
a) node_id=0 (即数组下标为0) 的node record 是在使用的, nextRelId=0, nextPropId=1, labels=0, extra=0
b) node_id=1 (即数组下标为0) 的node record 是在使用的, nextRelId=0, nextPropId=3, labels=0, extra=0
c) node_id=2 (即数组下标为0) 的node record 是已经释放了, nextRelId=1, nextPropId=4, labels=0, extra=0
结合 2.6.1 的源代码,可以的看到,fromNode 的 node_id=0, toNode的node_id=1, companyNode 的 node_id=2.
3.8.4 neostore.relationshipstore.db 的内容
从neo4j_exam的neostore.relationshipstore.db文件内容可以看到,文件中保存了有 2 条 relationship record记录的数组和一个字符串“RelationshipStore v0.A.2”(文件类型描述TYPE_DESCRIPTOR和 neo4j 的 ALL_STORES_VERSION构成)。
其中2 个 relationship record 的内容如下:
字段 | 第1条记录 | 第2条记录 |
in_use | 1 | 0 |
first_node | 0 | 0 |
second_node | 1 | 2 |
rel_type | 0 | 1 |
first_prev_rel_id | 1 | 2 |
first_next_rel_id | -1 | 0 |
second_prev_rel_id | 1 | 1 |
second_next_rel_id | -1 | -1 |
next_prop_id | 5 | 6 |
first-in-chain-markers | 3 | 3 |
3.8.5 neostore.relationshiptypestore.db的内容
record[0].name_id=0×01
record[1].name_id=0×02
3.8.6 neostore.relationshiptypestore.db.names 的内容
record[1]=”FELLOW”
record[2]=”BELONG”
3.8.7 neostore.propertystore.db的内容
type=0xB 表示 SHORT_STRING, type=0×9 表示 STRING.
因为 companyNode 节点和 belongRelationship 关系已经删除,所以其属性property[4], property[5] , property[7] 的 block_header (key,type,value)部分填充为0。
3.8.8 neostore.propertystore.db.strings的内容
打开neo4j_exam的neostore.nodestore.db.id文件看到如上内容:
第0个block 的前4个Bytes 保存 block_size=0×80, 即 block_header_size=8 和 string_block_size=120
第1个block 的保存例子中关系relationship的属性值一部分: < ["2013fubushi zhongguo fuhaobang:liyanhong no.3 mahuateng no.5 mayu no.8 ","liyanhong tui qinyingyong,mayu rugu liulanq >, 其中 block_header的值如下:link_block=0, in_use=1, nr_of_bytes=0x78 , next_block=2
第2个block 的保存例子中关系relationship的属性值一部分: < i; yidong rukou zhengduo anzhan shengji"] >, 其中 block_header的值如下:link_block=1, in_use=1, nr_of_bytes=0×28 , next_block=0xFFFFFFFF(即NULL)
3.8.9 neostore.propertystore.db.index的内容
record[0].name_id=01
record[1].name_id=02
record[2].name_id=03
record[3].name_id=04
3.8.10 neostore.propertystore.db.index.keys的内容
block[1]=”prop_key_table”
block[2]=”prop_key_name”
block[3]=”prop_key_event”
block[4]=”event”
4 参考
<graph databases>http://blog.csdn.net/huaishu/article/details/11748927
http://www.neo4j.org.cn/old-docs/
相关文章推荐
- 使用X-UA-Compatible来设置IE浏览器兼容模式
- Android开发之ADB命令
- GRE ISSUE写作论证论据素材 国家制度建设类
- 车牌自动检测
- Meteor node.js 复制(copy)文件的方法
- ServletContext和ServletConfig区别
- 第十三周--动物怎么叫(1)
- 日经春秋 20150602
- 日经社説 20150602 バター不足が迫る酪農改革
- 为什么程序员应该从现在就开始看书
- 【VS2013学习】
- Raft一致性算法
- c 函数指针
- TRIZ系列-创新原理-22-变害为利原理
- Android源代码下载方法具体解释
- Graph database_neo4j 底层存储结构分析(7)
- C++二分查找在搜索引擎多文档求交的应用分析
- list_for_each_entry宏函数解析(上)
- 数学之美札记:谈谈中文分词
- python中os.path.isfile()和os.path.isdir()均返回false的问题