谈一谈区块链项目使用的数据库 LevelDB
谈一谈区块链项目使用的数据库 LevelDB
本专栏会讲述区块链共识算法以及以太坊智能合约、超级账本智能合约、EOS 智能合约相关知识,还会详细的介绍几个实战项目。如果有可能的话,我们还能一起来阅读以太坊的源码。有兴趣的话我们一起来学习区块链技术吧~
一、为什么使用 LevelDB
首先是因为区块链写入数据的情况远远多于去数据库查询的情况,而 LevelDB 拥有高性能的写入。另外与 Redis 相比,Redis 的持久化数据文件每一个都比较大,这样在进行同步时问题比较大。
二、什么是 LevelDB
LevelDB 是一个键值对数据库引擎,它是可持久化的。和很多数据库一样,它是用 C++写的。另外它的出身也很牛,它是由谷歌的 Jeff Dean 和 Sanjay Ghemawat 开发,并且是开源的。
它的键值对都可以是任意的,没有要求的字节数组。它同时支持内存和持久化的存储。它会定期的将内存中的数据持久化。
LevelDB 中的数据是根据键来排序的,不过我们可以根据我们的需求重写排序函数。
它由三个基本操作组成,Put(key,value),Get(key),Delete(key)。
区块链是需要事务的,而这个数据库是支持事务,它能把多个操作变成一次原子操作。
三、LevelDB 的缺点
它是非关系型数据库,它不可以进行 SQL 查询操作,也并不提供索引功能。
它的多线程比较鸡肋,同一时刻只有单线程访问数据库。
不支持 C/S(客户端/服务器)通信模型。
四、LevelDB 的存储介质
我们前面讲了,LevelDB 存储介质有内存和硬盘。内存中有 memtable 和 immutable memtable。 硬盘中有 log 文件,manifest 文件,current 文件和 sstable 文件。
memtable 是可读可写的,我们写一个东西,是先到这里,它存的东西达到一定数量就会将部分数据存到 immutable memtable,它是不可写的。
内存的数据会持久化到硬盘,先是到 log 文件。然后 manifest 会记录这个文件存储什么键值对,然后 current 会帮助 manifest 记录那些键值对。
版权声明: 本文为 InfoQ 作者【Regan Yue】的原创文章。
原文链接:【http://xie.infoq.cn/article/010e36abc137ff87c421d7611】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论