比特币代码分析11 比特币存储机制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比特币代码分析11 比特币存储机制相关的知识,希望对你有一定的参考价值。
比特币存储机制
比特币存储系统由两部分组成: kv 数据库(levelDB)索引和普通数据文件。普通文件用于存储区块链数据,kv 数据库用于存储区块链元数据。用于存储区块链数据的普通文件以 blk00000.dat , blk00001.dat 文件名格式组成。其中 index 目录存储用于存储区块元数据。
普通区块数据文件
为了快速检索区块数据,每个文件的大小是128 M Bytes。区块里的数据(区块头和区块里的所有交易)都会序列成字节码的形式写入 dat 文件中。在序列化的过程中,如果检测到当前写入文件尺寸加上区块尺寸大于 128 M Bytes,则会重新生成一个 dat 文件。
kv数据索引
区块的索引元数据格式如 <blockHash,xxxxx+npos> 格式, 其中 xxxxx 为 dat 文件序号,npos 为区块写入 dat 文件的起始位置。?
交易的元数据格式如 <txHash, xxxxx+npos+nTxOffset> 格式, 其中 xxxxx、npos 和上面的描述一致,nTxOffset 为写入 dat 文件的起始位置(基于npos 位置)。
上述所有元数据都将写入 kv 数据库中,其中 blockhash/txHash 将作为后续查询具体数据在 dat 文件中的索引使用。
LevelDB
Google 的 LevelDB 数据库存储区块链元数据。Leveldb是一个google实现的非常高效的kv数据库,并且是开源的。
它的一个主要特点就是写的性能非常好,适用于比特币客户端这种应用场景。
levelDB虽然是个数据库,但是并不像其它的主流数据库(mysql ,oracle等)可以提供客户端连接服务。它只是一个基于c++的lib库而已,所以我们使用起来也很简单,直接在工程里链接lib库文件。
以上是关于比特币代码分析11 比特币存储机制的主要内容,如果未能解决你的问题,请参考以下文章