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

举报
Regan Yue 发表于 2021/11/09 21:13:22 2021/11/09
【摘要】 谈一谈区块链项目使用的数据库LevelDB本专栏会讲述区块链共识算法以及以太坊智能合约、超级账本智能合约、EOS智能合约相关知识,还会详细的介绍几个实战项目。如果有可能的话,我们还能一起来阅读以太坊的源码。有兴趣的话我们一起来学习区块链技术吧~一、为什么使用LevelDB首先是因为区块链写入数据的情况远远多于去数据库查询的情况,而LevelDB拥有高性能的写入。另外与Redis相比,Redi...

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。