谈一谈区块链项目使用的数据库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记录那些键值对。
- 点赞
- 收藏
- 关注作者
评论(0)