leveldb
刘小京
the best way to learn is by making mistakes!
展开
-
leveldb数据库的put ,get ,compaction操作总结
之前排查智能合约执行返回0x的问题,涉及到数据库部分的内容,就把leveldb的3个主要操作介绍一下。 在此之间先介绍下leveldb中的文件类型。 文件类型 文件类型总共有5种:log, ldb, CURRENT, MANIFEST,LOG。 另外还有一部分内存缓存。 内存缓存:memtable。默认是32M大小。memtable写满之后会转为frozenmemtable,用于写入数据库 l...原创 2019-01-10 16:07:35 · 602 阅读 · 10 评论 -
leveldb数据库的Get操作源码
前文介绍了Put操作的流程,基本原理就是将要写入的数据先追加到log文件中,然后写入内存,就算Put完成。 leveldb是key-value类型的数据库,因此要进行某个value的查询,必须知道key才行,如此也就限制了leveldb无法进行条件查询,分区,分组,排序等操作。本文来看看仅有的Get操作是如何做的。先看Get函数入口 func (db *DB) Get(key []byte, ro...原创 2019-03-25 19:37:43 · 742 阅读 · 6 评论 -
leveldb数据库的Put操作源码
之前的leveldb总结分享中说到了三个关键部分,数据的Put,Get,compaction。其中put操作实现了数据的增删改功能,Get操作实现了数据的查功能。本文从源码角度说明下put操作的相关流程。 put接口位于leveldb的db_write.go文件中,代码如下 func (db *DB) Put(key, value []byte, wo *opt.WriteOptions) err...原创 2019-03-25 19:38:14 · 540 阅读 · 0 评论 -
leveldb数据库的缓存cache介绍
前文在介绍get操作的时候说过,get操作查询数据库,是需要先根据key定位到是哪个文件,然后去该文件中查询。那问题来了,如果每次都打开文件,查询磁盘,必然会导致有大量的磁盘IO,那查询的效率会大大降低。为了提升查询的效率,leveldb增加了缓存,用于缓存最近打开的文件数据。当定位到具体的文件时,先去缓存查看有没有该文件的缓存,有的话,直接在缓存中查找,没有的话才查询磁盘。下面看看代码实现。 f...原创 2019-03-26 10:03:13 · 1058 阅读 · 0 评论 -
leveldb数据库的tablecompaction操作源码
前文介绍了memcompaction,主要是将内存数据写入磁盘。本文介绍tablecompaction,了解tablecompaction的过程,哪些表需要进行compaction,同时看看tablecompactiton有什么好处。直接上代码tableCompaction(leveldb/db_compaction.go),参数c,包含了要合并的表信息 func (db *DB) tableCo...原创 2019-03-26 10:07:33 · 360 阅读 · 0 评论 -
leveldb数据库的memcompaction操作源码
之前介绍了leveldb数据库的put和get操作。put操作将数据写入内存并记录log就算完事,但内存并不是无限的,还是需要将内存中的数据写入到磁盘中的,完成这一步的操作叫做memcompaction。而get操作的过程需要根据key的范围进行搜索定位到某一个文件中,如果仅是将内存数据写入到磁盘文件中,虽然key在单个文件内是有序,随着数据量的增加,多个文件的key的范围重叠的几率就会越来越大,...原创 2019-03-26 10:08:29 · 260 阅读 · 0 评论 -
leveldb数据库的version介绍
之前分享了leveldb的相关操作,其中compaction操作会导致磁盘存储文件的增加与删除,那在查询数据的时候是否会存在被查文件被删掉的可能呢?答案是不会的,本文就来看看leveldb自身的版本控制。 我们从版本的结构,生成,使用,和销毁四个部分来说明。 版本的结构:结构定义如下,我们在查询中重点关注的是 levels []tFiles属性。存储了当前版本所有的文件,以及session属性,s...原创 2019-03-26 19:20:44 · 680 阅读 · 0 评论 -
减少新节点数据全同步花费时间的方法总结
背景 对于任何一条区块链来说,随着运行时间的增长,数据量的增加是不可避免的一件事。那对于新加入的节点来说,需要同步的历史数据就会越来越多,同步数据花费的时间也会越来越长。这对于节点参与的积极性是有着不利的影响的。本文主要讨论能够减少新节点数据全同步花费时间的几种方法(目前主网全同步数据需要2天时间)。 同步的耗时因素 讨论具体方法之前,先考虑下同步数据时花费时间的具体耗时因素。 数据量 : 数据总...原创 2019-06-13 16:22:31 · 711 阅读 · 2 评论