谈一谈区块链项目使用的数据库LevelDB

谈一谈区块链项目使用的数据库LevelDB本文收录于我的专栏:细讲区块链 本专栏会讲述区块链共识算法以及以太坊智能合约、超级账本智能合约、EOS智能合约相关知识,还会详细的介绍几个实战项目。如果有可能的话,我们还能一起来阅读以太坊的源码。有兴

「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」。

谈一谈区块链项目使用的数据库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记录那些键值对。

今天的文章谈一谈区块链项目使用的数据库LevelDB分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/21025.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注