CN109726146B - 基于区块高度的可定制淘汰策略的可伸缩缓存方法 - Google Patents
基于区块高度的可定制淘汰策略的可伸缩缓存方法 Download PDFInfo
- Publication number
- CN109726146B CN109726146B CN201811636214.2A CN201811636214A CN109726146B CN 109726146 B CN109726146 B CN 109726146B CN 201811636214 A CN201811636214 A CN 201811636214A CN 109726146 B CN109726146 B CN 109726146B
- Authority
- CN
- China
- Prior art keywords
- hashmap
- data items
- data item
- elimination
- block height
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种基于区块高度的可定制淘汰策略的可伸缩缓存方法,通过使用哈希桶的算法实现了一个常规的hashmap,并使用双向链表构建基于区块高度的缓存管理器来管理hashmap中的数据项,通过对数据项的判定调节桶数量,从而能够在缓存数据项个数动态伸缩可用容量的大小,此外,以缓存策略为以区块高度作为唯一参数的判定函数,允许开发者根据区块高度定制淘汰策略,淘汰掉在指定区块高度之前插入缓存的数据项。本发明应用于联盟链背景下的区块链网络上,既保证了状态数据缓存的有效性,同时又实现缓存容量动态伸缩,以及根据区块高度进行缓存项淘汰的机制,防止了数据“写丢失”与内存无上限增长,提高了内存利用率与系统吞吐量。
Description
技术领域
本发明涉及去中心化的区块链状态数据的缓存方法的设计领域,尤其涉及一种基于区块高度的可定制淘汰策略的可伸缩缓存方法。
背景技术
区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改。区块链上的交易会产生新的状态数据,这些状态数据在验证阶段需要先写入缓存,以防止“写丢失”;在提交阶段再进行持久化。
传统对区块链状态数据的缓存方法使用LRU(Least Recently Used,即最近最少使用),需要设置一个最大容量。在这样的方法下,一旦某一轮中修改的状态数据个数超过了缓存容量,则会有一些未被持久化的数据被淘汰,造成在提交阶段无法持久化,即发生“写丢失”。若缓存不设容量上限,虽能暂时性解决“写丢失”问题,但却会使得内存开销无上限地增长,威胁到系统稳定性。因此,如何解决缓存数据在持久化之前被淘汰的问题,以及如何防止缓存无上限地扩张,成为了实现高可用、高性能区块链系统的一项挑战。
发明内容
针对现有缓存技术的不足,本发明提出一种基于区块高度的可定制淘汰策略的可伸缩缓存方法,保证了缓存本身的有效性,并且能够根据缓存数据项个数动态伸缩可用容量的大小,同时允许开发者根据区块高度定制淘汰策略,淘汰掉在指定区块高度之前插入缓存的数据项。
本发明的目的是通过如下技术方案实现的:一种基于区块高度的可定制淘汰策略的可伸缩缓存方法,该方法包含如下关键技术环节:
S1:hashmap的实现及缓存管理器的设计:使用哈希桶的算法实现了一个常规的hashmap,并使用双向链表构建基于区块高度的缓存管理器来管理hashmap中的数据项;其中,数据项以(key,value,block_num)的元组形式插入缓存。key为数据项的索引,value为数据项自身,block_num为区块高度编号;
S2:缓存伸缩策略:当数据项增加并超过一定阈值时,将hashmap中的桶数量扩大一倍,map中的数据项重哈希;当数据项减少并低于桶数量的一半时,将hashmap中的桶数量减少一半,map中的数据项重哈希;
S3:淘汰策略:开发者可自行定制缓存淘汰策略;缓存策略为以区块高度作为唯一参数的判定函数,在淘汰阶段会将每个数据项插入时的区块高度传入该判定函数,根据函数返回值判断是否需要淘汰该数据项。
进一步地,所述的S1中,使用双向链表构建基于区块高度的缓存管理器,是将区块高度按序排列并作为第一层链表的元素,数据项的引用本身作为第二层链表的元素。
进一步地,所述的S2中,以hashmap使用数据项的个数与当前数据项总量、桶的数量及溢出数量作为依据,对hashmap的可用容量进行扩张或收缩。
进一步地,所述的S3中,当执行淘汰策略时,先在缓存管理器中找到需要淘汰的数据项的引用,再删除hashmap里对应的数据项实例。通过S1中所述的数据结构,可将淘汰阶段的数据项判定过程的时间复杂度降为O(n)。
本发明的有益效果如下:
本发明应用于联盟链背景下的区块链网络上,既保证了状态数据缓存的有效性,同时又解决缓存容量动态伸缩,以及根据区块高度进行缓存项淘汰的机制,防止了数据“写丢失”与内存无上限增长,提高了内存利用率与系统吞吐量,是缓存技术在区块链应用中的大突破。
附图说明
图1是本发明的方法中缓存方法的整体架构图;
图2是本发明的方法中缓存管理器数据项移动的示意图。
图3是本发明的方法中缓存容量扩张的示意图;
图4是本发明的方法中缓存容量收缩的示意图;
具体实施方式
下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
Hashmap的实现
Hashmap部分基于论文《Dynamic-Sized Nonblocking Hash Tables》by YujieLiu进行实现。结构图如图1左所示。
缓存管理器的设计与实现
该部分我们设计了名为LBN(Latest Block Number,即最新区块高度)的缓存管理方法(下简称为LBN),来管理hashmap中数据项的生命周期。该方法根据最新的区块高度执行定制化的淘汰策略,将区块高度作为参数传入判定函数,根据函数返回值判定是否应被淘汰。
LBN的实现采用了双层的双向链表,第一层为以区块高度block_num组成的有序的双向链表,第二层为以在对应高度插入hashmap的数据项所组成的双向链表,结构图如附录图1右所示。
当有新数据插入时,先将数据项实例以(key,value)的元组形式插入hashmap,同时根据将数据项索引根据block_num插入LBN中。这里需要区分两种情况:
1.若该数据项的key之前不存在,则直接追加到对应区块高度节点下的二级链表尾部。
2.若该数据项的key之前存在于LBN中,则采用移动的方式,示意图如图2所示。
在执行淘汰策略时,仅需遍历第一级区块高度链表,将满足条件的区块高度下的链表清空,淘汰对应数据项即可,时间复杂度为O(n)。被淘汰的数据项也将从hashmap中删除。
淘汰策略与淘汰过程
本方法中,淘汰策略被设计成函数的形式,区块高度为该函数的唯一入参。如下为一个淘汰判定函数的例子:
当返回值为true时,表示允许淘汰;为false时表示不能淘汰。
LBN中淘汰数据的过程分为以下三步:
1.顺序遍历LBN的一级链表,依次调用判定函数,判断是否需要淘汰该高度下数据项。
2.若满足淘汰条件,则遍历该节点下的二级链表,将每个节点对应的数据项从HashMap中删除。
3.清空二级链表,并从一级链表中移除该节点。
缓存伸缩策略及过程
本缓存方法与传统的缓存方法如LRU不同的地方之一是:不限制缓存容量的上限,而是依靠主动淘汰数据来防止内存地无上限增长。同时,为了合理利用内存,会根据缓存中的数据项数量自动地伸缩内存空间,以节省内存开销。
本方法预设了三个变量进行缓存空间伸缩的辅助变量:
·mInitialSize:初始化的桶数量。
·mOverflowThreshold:每个桶的数据项最大值。
·mOverflowGrowThreshold:每个桶的实际数据项溢出部分(实际数量-桶软顶)的数量的最大值。
在缓存初始化时,为缓存赋予扩张和伸缩的阈值:
·growThreshold:扩张阈值,预设为mInitialSize*mOverflowThreshold,即桶数*每个桶数据项最大值。
·shrinkThreshold:收缩阈值,预设为0。
空间扩张的判定条件有两个:
1.缓存中数据项总数是否大于扩张阈值growThreashold。
2.若所命中的桶的数据项已溢出,则判断缓存中溢出部分数据的总量是否大于mOverflowGrowThreshold。
以上两个条件满足其一,则执行扩张操作,将当前桶的数量扩大为原来的2倍,同时growThreshold扩大为原来的2倍,shrinkThreshold设为新桶数量的1/2。
空间收缩的判定条件只有一个:缓存中数据项总数是否小于收缩阈值shrinkThreshold。若满足条件,则执行收缩操作,将当前桶的数量缩小为原来的1/2,同时growThreshold缩小为原来的1/2,shrinkThreshold设为新桶数量的1/2。
本领域普通技术人员可以理解,以上所述为本发明的一种具体实现方法,其中各参数均可根据实际业务场景进行调节。尽管上述实现方法对发明的思路进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述的技术方法进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。
Claims (3)
1.一种基于区块高度的可定制淘汰策略的可伸缩缓存方法,其特征在于,该方法包含如下步骤:
S1:hashmap的实现及缓存管理器的设计:使用哈希桶的算法实现了一个常规的hashmap,并使用双向链表构建基于区块高度的缓存管理器来管理hashmap中的数据项;其中,数据项以(key,value,block_num)的元组形式插入缓存;key为数据项的索引,value为数据项自身,block_num为区块高度编号;
S2:缓存伸缩策略:当数据项增加并超过一定阈值时,将hashmap中的桶数量扩大一倍,map中的数据项重哈希;当数据项减少并低于桶数量的一半时,将hashmap中的桶数量减少一半,map中的数据项重哈希;
S3:淘汰策略:淘汰策略由开发者自行定制;淘汰策略为以区块高度作为唯一参数的判定函数,在淘汰阶段会将每个数据项插入时的区块高度传入该判定函数,根据函数返回值判断是否需要淘汰该数据项;
所述的S1中,使用双向链表构建基于区块高度的缓存管理器,是将区块高度按序排列并作为第一层链表的元素,数据项的引用本身作为第二层链表的元素。
2.根据权利要求1所述的基于区块高度的可定制淘汰策略的可伸缩缓存方法,其特征在于,所述的S2中,以hashmap使用数据项的个数与当前数据项总量、桶的数量及溢出数量作为依据,对hashmap的可用容量进行扩张或收缩。
3.根据权利要求1所述的基于区块高度的可定制淘汰策略的可伸缩缓存方法,其特征在于,所述的S3中,当执行淘汰策略时,先在缓存管理器中找到需要淘汰的数据项的引用,再删除hashmap里对应的数据项实例;通过S1中所述的数据项的结构,将淘汰阶段的数据项判定过程的时间复杂度降为O(n)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811636214.2A CN109726146B (zh) | 2018-12-29 | 2018-12-29 | 基于区块高度的可定制淘汰策略的可伸缩缓存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811636214.2A CN109726146B (zh) | 2018-12-29 | 2018-12-29 | 基于区块高度的可定制淘汰策略的可伸缩缓存方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109726146A CN109726146A (zh) | 2019-05-07 |
CN109726146B true CN109726146B (zh) | 2020-12-15 |
Family
ID=66296088
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811636214.2A Active CN109726146B (zh) | 2018-12-29 | 2018-12-29 | 基于区块高度的可定制淘汰策略的可伸缩缓存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109726146B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110941673B (zh) * | 2019-11-26 | 2023-03-24 | 中国人民解放军战略支援部队信息工程大学 | 区块链数据结构及任务处理方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1997000A (zh) * | 2005-12-31 | 2007-07-11 | 腾讯科技(深圳)有限公司 | 一种基于虚拟主机的web服务器及用户获取访问数据的方法 |
CN105741095A (zh) * | 2016-01-29 | 2016-07-06 | 彭军红 | 一种区块链动态压缩存取方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101819596B (zh) * | 2010-04-28 | 2011-11-02 | 烽火通信科技股份有限公司 | 一种基于内存的xml脚本缓存容器 |
US8909596B1 (en) * | 2013-01-08 | 2014-12-09 | Google Inc. | Operational-transform-compatible representation of 2-dimensional page layout data |
CN106886890B (zh) * | 2017-02-07 | 2020-07-17 | 杭州溪塔科技有限公司 | 一种基于区块链的定时交易执行方法 |
CN109032970A (zh) * | 2018-06-16 | 2018-12-18 | 温州职业技术学院 | 一种基于lru算法的动态缓存方法 |
-
2018
- 2018-12-29 CN CN201811636214.2A patent/CN109726146B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1997000A (zh) * | 2005-12-31 | 2007-07-11 | 腾讯科技(深圳)有限公司 | 一种基于虚拟主机的web服务器及用户获取访问数据的方法 |
CN105741095A (zh) * | 2016-01-29 | 2016-07-06 | 彭军红 | 一种区块链动态压缩存取方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109726146A (zh) | 2019-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8397027B2 (en) | Methods and systems for multi-caching | |
US10007615B1 (en) | Methods and apparatus for performing fast caching | |
CN101655861B (zh) | 基于双计数布鲁姆过滤器的哈希方法和哈希装置 | |
CN113535706B (zh) | 两阶段布谷鸟过滤器及基于两阶段布谷鸟过滤器的重复数据删除方法 | |
CN102263701B (zh) | 队列调整方法及装置 | |
CN110119487B (zh) | 一种适用于发散数据的缓存更新方法 | |
CN106899643A (zh) | 一种用户日志存储方法及设备 | |
CN104156323B (zh) | 一种高速缓冲存储器的数据块长度自适应读取方法及装置 | |
CN106407224A (zh) | 一种键值存储系统中文件压实的方法和装置 | |
CN109726146B (zh) | 基于区块高度的可定制淘汰策略的可伸缩缓存方法 | |
CN109376125A (zh) | 一种元数据存储方法、装置、设备及计算机可读存储介质 | |
US20060156383A1 (en) | Smart buffering for policy enforcement | |
CN105095495A (zh) | 一种分布式文件系统缓存管理方法和系统 | |
CN113076319B (zh) | 基于离群值检测技术和位图索引的动态数据库填充方法 | |
CN108093024B (zh) | 一种基于数据频度的分类路由方法及装置 | |
CN113918857A (zh) | 一种提高分布式web应用系统性能的三级缓存加速方法 | |
CN107577618A (zh) | 一种三路均衡缓存淘汰方法及装置 | |
CN103838682B (zh) | 一种文件目录的读取方法和设备 | |
CN114153760B (zh) | 基于权重的健值存储缓存淘汰方法、系统及存储介质 | |
CN114500269B (zh) | 基于自定义属性对车端信号进行路由分发的方法及汽车 | |
CN115951832A (zh) | 针对对象存储的智能小文件合并的方法及系统 | |
CN112565437B (zh) | 一种面向跨界服务网络的服务缓存方法 | |
CN116089425A (zh) | 一种基于LFU算法改进的redis内存淘汰策略的方法及装置 | |
CN117999771A (zh) | 基于转发表的填覆水平适配转发数据库学习速率 | |
CN102014066B (zh) | 一种覆盖网络中的数据缓存管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |