当前位置: 首页 > news >正文

做rom的网站百度权重工具

做rom的网站,百度权重工具,用jsp做的网站首页,网站竞价怎么做作者:Derek 简介 Github地址:github.com/Bytom/bytom Gitee地址:gitee.com/BytomBlockc… 本章介绍Derek解读-Bytom源码分析-持久化存储LevelDB 作者使用MacOS操作系统,其他平台也大同小异 Golang Version: 1.8 LevelDB介绍 比原链…

作者:Derek

简介

Github地址:github.com/Bytom/bytom

Gitee地址:gitee.com/BytomBlockc…

本章介绍Derek解读-Bytom源码分析-持久化存储LevelDB

作者使用MacOS操作系统,其他平台也大同小异

Golang Version: 1.8

LevelDB介绍

比原链默认使用leveldb数据库。Leveldb是一个google实现的非常高效的kv数据库。LevelDB是单进程的服务,性能非常之高,在一台4核Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。 由于Leveldb是单进程服务,不能同时有多个进程进行对一个数据库进行读写。同一时间只能有一个进程,或一个进程多并发的方式进行读写。 比原链在数据存储层上存储所有链上地址、资产交易等信息。

LevelDB的增删改查操作

LevelDB是google开发的一个高性能K/V存储,本节我们介绍下LevelDB如何对LevelDB增删改查。

package mainimport ("fmt"dbm "github.com/tendermint/tmlibs/db"
)var (Key        = "TESTKEY"LevelDBDir = "/tmp/data"
)func main() {db := dbm.NewDB("test", "leveldb", LevelDBDir)defer db.Close()db.Set([]byte(Key), []byte("This is a test."))value := db.Get([]byte(Key))if value == nil {return}fmt.Printf("key:%v, value:%v\n", Key, string(value))db.Delete([]byte(Key))
}// Output
// key:TESTKEY, value:This is a test.
复制代码

以上Output是执行该程序得到的输出结果。

该程序对leveld进行了增删改查操作。dbm.NewDB得到db对象,在/tmp/data目录下会生成一个叫test.db的目录。该目录存放该数据库的所有数据。 db.Set 设置key的value值,key不存在则新建,key存在则修改。 db.Get 得到key中value数据。 db.Delete 删除key及value的数据。

比原链的数据库

默认情况下,数据存储目录在--home参数下的data目录。以Darwin平台为例,默认数据库存储在 $HOME/Library/Bytom/data。

  • accesstoken.db token信息(钱包访问控制权限) core.db 核心数据库,存储主链相关数据。包括块信息、交易信息、资产信息等 discover.db 分布式网络中端到端的节点信息
  • trusthistory.db txdb.db 存储交易相关信息 txfeeds.db 目前比原链代码版本未使用该功能,暂不介绍 wallet.db 本地钱包数据库。存储用户、资产、交易、utox等信息

以上所有数据库都由database模块管理

比原数据库接口

在比原链中数据持久化存储由database模块管理,但是持久化相关接口在protocol/store.go中

type Store interface {BlockExist(*bc.Hash) boolGetBlock(*bc.Hash) (*types.Block, error)GetStoreStatus() *BlockStoreStateGetTransactionStatus(*bc.Hash) (*bc.TransactionStatus, error)GetTransactionsUtxo(*state.UtxoViewpoint, []*bc.Tx) errorGetUtxo(*bc.Hash) (*storage.UtxoEntry, error)LoadBlockIndex() (*state.BlockIndex, error)SaveBlock(*types.Block, *bc.TransactionStatus) errorSaveChainStatus(*state.BlockNode, *state.UtxoViewpoint) error
}
复制代码
  • BlockExist 根据hash判断区块是否存在
  • GetBlock 根据hash获取该区块
  • GetStoreStatus 获取store的存储状态
  • GetTransactionStatus 根据hash获取该块中所有交易的状态
  • GetTransactionsUtxo 缓存与输入txs相关的所有utxo
  • GetUtxo(*bc.Hash) 根据hash获取该块内的所有utxo
  • LoadBlockIndex 加载块索引,从db中读取所有block header信息并缓存在内存中
  • SaveBlock 存储块和交易状态
  • SaveChainStatus 设置主链的状态,当节点第一次启动时,节点会根据key为blockStore的内容判断是否初始化主链。

比原链数据库key前缀

** database/leveldb/store.go **

var (blockStoreKey     = []byte("blockStore")blockPrefix       = []byte("B:")blockHeaderPrefix = []byte("BH:")txStatusPrefix    = []byte("BTS:")
)
复制代码
  • blockStoreKey 主链状态前缀
  • blockPrefix 块信息前缀
  • blockHeaderPrefix 块头信息前缀
  • txStatusPrefix 交易状态前缀

GetBlock查询块过程分析

** database/leveldb/store.go **

func (s *Store) GetBlock(hash *bc.Hash) (*types.Block, error) {return s.cache.lookup(hash)
}
复制代码

** database/leveldb/cache.go **

func (c *blockCache) lookup(hash *bc.Hash) (*types.Block, error) {if b, ok := c.get(hash); ok {return b, nil}block, err := c.single.Do(hash.String(), func() (interface{}, error) {b := c.fillFn(hash)if b == nil {return nil, fmt.Errorf("There are no block with given hash %s", hash.String())}c.add(b)return b, nil})if err != nil {return nil, err}return block.(*types.Block), nil
}
复制代码

GetBlock函数最终会执行lookup函数。lookup函数总共操作有两步:

  • 从缓存中查询hash值,如果查到则返回
  • 如果为从缓存中查询到则回调fillFn回调函数。fillFn回调函数会将从磁盘上获得到块信息存储到缓存中并返回该块的信息。

fillFn回调函数实际上调取的是database/leveldb/store.go下的GetBlock,它会从磁盘中获取block信息并返回。

http://www.lbrq.cn/news/2621665.html

相关文章:

  • 怎么在家做网站十大免费引流平台
  • 网站logo怎么修改惠州百度推广排名
  • 电子政务 和网站建设总结广州seo推广公司
  • 怎么用挂靠的公司做网站东莞搜索排名提升
  • 家装设计效果图网站怎么做网上销售
  • 济南正规做网站公司阿里云域名注册流程
  • 长春网站建设及推广seo搜索引擎优化期末考试
  • 网页设计最牛的网站建设seo优化专家
  • 做网站应该做到那几点百度竞价怎么排名第一
  • 怎么做社交网站网络营销与直播电商专业就业前景
  • 学做网网站论坛电子商务平台有哪些
  • 绿色蔬菜网站模板给公司做网站要多少钱
  • 如何做自己微网站知识营销
  • 新手用什么框架做网站比较好如何用google搜索产品关键词
  • 广州好的做网站公司专业网络推广软件
  • wordpress 微网站网络营销流程
  • 加强协会网站建设意义电商关键词查询工具
  • 网站建设有哪些效益免费发布网站seo外链
  • 深圳设计功能网站枣庄网络推广seo
  • 做网站的外包能学到什么网络营销的特征
  • 淘宝联盟怎么样做网站什么网站可以发布广告
  • 做教师知识网站有哪些内容百度推广员工工资怎么样
  • 网页设计案例图片百度搜索seo
  • 公司网站代码模板同城广告发布平台
  • 个人怎样申请网站百度销售系统
  • 网站备案百度站长提交万能的搜索引擎
  • 建设网站长尾关键词挖掘精灵
  • 做门户网站用什么模板好地推拉新接单网
  • 免费解析网站制作学校网站建设
  • 梦幻西游网页版官方网站教育培训报名
  • 企业级Linux服务器安全:防火墙规则配置与Web/SSH服务优化指南
  • Antlr学习笔记 01、maven配置Antlr4插件案例Demo
  • Linux文件权限管理与ACL配置指南
  • 豆包1.6+PromptPilot实战:构建智能品牌评价情感分类系统的技术探索
  • python匿名函数lambda
  • eSIM技术深度解析:从物理芯片到数字革命