比特币没有中心化统一数据库服务器,完整账本数据库分布式储存在全球上万台全节点设备本地磁盘,细分区块原始数据、UTXO状态数据库、可选索引三类数据,分别存放在节点客户端固定目录内。从网络架构来看,比特币依托P2P对等网络完成全量数据同步,不存在官方托管的云端数据库,任何安装BitcoinCore并同步完整区块的电脑、云服务器,都是比特币数据库的存储载体,全网所有节点账本通过共识机制实时对齐,任意单一节点丢失数据不会造成全网账本损毁,这也是比特币去中心化存储最核心的特征。当前全网完整区块体量突破500GB,每年新增数据在50GB至100GB区间,不同类型节点存储的数据完整度存在明显区分。

主流BitcoinCore客户端会根据操作系统划分默认存储路径,Windows系统默认目录为%APPDATA%\Bitcoin,macOS存于~/Library/ApplicationSupport/Bitcoin,Linux系统则是~/.bitcoin,用户也可通过启动命令自定义磁盘存储位置。目录内部拆分两大核心数据库文件夹,blocks文件夹存放blk开头后缀为dat的区块原始文件,单份文件上限128MB,依次收录从2009年创世区块开始所有区块头与原始交易记录,是链上历史数据的物理载体;chainstate文件夹采用LevelDB键值数据库格式,单独存放UTXO未花费输出数据集,整体占用空间约8GB,记录全网实时可动用的比特币资产快照,节点校验转账是否双花时直接调取这份数据库,不用遍历全部区块从而大幅提升验证效率。

除基础必备数据库文件外,indexes目录为可选附加数据库,开启交易索引后会生成txindex子文件夹,收录交易哈希与区块位置的映射数据,开启该索引后节点可通过RPC指令依据交易ID直接查询详情,未开启索引只能依靠区块高度逐段检索数据,这也是链上数据分析平台大多搭建全索引节点的原因。不同节点模式还会改变数据库留存规则,修剪节点只保留近期区块数据,自动删除老旧blk文件,磁盘占用可压缩至20GB以内,但无法对外提供历史区块查询;归档全节点完整留存全部数据库文件,是链上数据溯源、区块浏览器搭建的底层数据源,矿池、区块链大数据服务商基本全部部署归档全节点来留存完整比特币数据库。

普通手机、轻钱包用户不会下载完整数据库,仅存储本地私钥文件,需要查询余额与交易时,通过SPV简易支付验证协议向全网全节点调取数据库数据,自身不参与账本存储维护。市面上各类区块浏览器的数据来源,本质是对接自建全节点的本地数据库,再通过API接口对外展示链上信息,浏览器平台本身不独立存储原始区块数据库,数据源始终依托分布式节点网络。想要自行调取原始比特币数据库,最稳妥的方式就是部署BitcoinCore全节点,等待客户端从P2P网络逐个同步区块数据至本地磁盘。
