CN112286873A - 一种哈希树缓存方法及装置 - Google Patents
一种哈希树缓存方法及装置 Download PDFInfo
- Publication number
- CN112286873A CN112286873A CN202011190181.0A CN202011190181A CN112286873A CN 112286873 A CN112286873 A CN 112286873A CN 202011190181 A CN202011190181 A CN 202011190181A CN 112286873 A CN112286873 A CN 112286873A
- Authority
- CN
- China
- Prior art keywords
- tree
- hash
- node
- buffer area
- hash tree
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 239000000872 buffer Substances 0.000 claims abstract description 100
- 230000002085 persistent effect Effects 0.000 claims abstract description 18
- 230000002688 persistence Effects 0.000 claims description 32
- 238000004590 computer program Methods 0.000 claims description 11
- 238000013507 mapping Methods 0.000 description 18
- 230000008569 process Effects 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 230000007717 exclusion Effects 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 239000000126 substance Substances 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000593 degrading effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1727—Details of free space management performed by the file system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
Abstract
本发明公开了一种哈希树缓存方法及装置,根据写入数据的逻辑位置确定其在哈希树中的位置信息,将写入数据的哈希签名和位置信息存储在第一前置缓冲区;当第一前置缓冲区写满后,将其作为当前备用前置缓存区,并将其内部数据更新至哈希树;当哈希树的空间大小达到阈值时,将哈希树持久化至磁盘;在本发明中由于引入了第一前置缓冲区、第二前置缓冲区,使得读写数据对应了前置缓冲区,有效地隔离了上述两种互逆的哈希树操作,改进了哈希树操作的复杂度,可以实现用户读写任务与哈希树持久化并发执行,有效的提升了分布式存储系统的确定写性能。
Description
技术领域
本发明属于计算机存储技术领域,尤其涉及一种哈希树缓存方法及装置。
背景技术
分布式存储空间管理的基本方法是通过多种映射,将用户可见的逻辑卷设备映射到分布在各个节点磁盘上的底层数据块。而为了维护这种映射关系,系统需要对大量的元数据进行管理。
在所有的映射关系中,逻辑卷设备通常采用树的方式实现从连续的虚拟地址空间映射到不连续的物理存储空间。已有的存储解决方案采用了基于哈希签名的方式构造空间树,一般称之为哈希树。根据内容生成哈希签名,使用哈希签名构造逻辑卷的空间树。这种方案的优点是可以直接对数据进行校验,使用树节点上的哈希签名与当前数据的哈希签名比较,可以判断数据真实性。
但是,基于哈希签名的空间树也存在缺点。当数据发生变化,树节点上的哈希签名必须跟着更新才能反映最新的数据。例如,逻辑卷设备发生了用户写任务,在指定位置的数据发生了改变,此时需要按照自顶向下的方式从磁盘读入哈希树上相应的分支上所有树节点到叶子节点,更新底层叶子节点中的哈希签名以映射新的数据。为了减少磁盘读写频率,树节点读入系统内存后会驻留一段时间。但是如果逻辑卷设备的空间很大,按照目前4K数据块构造哈希树,哈希树会占用大量的系统内存,如一个1TB的逻辑卷设备需要占用5GB内存。
因此,为了防止哈希树占用大量内存,同时尽量减少磁盘读写,设计上一般会根据当前所占系统内存的大小采取自底向上的方式将树节点持久化到磁盘。从哈希树支持用户写任务与自身持久化的方式来看,前者需要自顶向下的方式修改哈希树,把树节点从磁盘读入内存;后者需要自底向上的方式把树节点持久化到磁盘上。这两种互逆的操作,要求在同一时段只能执行一种操作,这样大大影响了分布式存储的写性能。
发明内容
本发明的目的是提供一种哈希树缓存方法及装置,以提升分布式存储系统的写性能。
本发明采用以下技术方案:一种哈希树缓存方法,包括以下步骤:
根据写入数据的逻辑位置确定其在哈希树中的位置信息,其中,位置信息包括叶子节点及偏移量;
将写入数据的哈希签名和位置信息存储在第一前置缓冲区;第一前置缓冲区为当前活动前置缓存区;
当第一前置缓冲区写满后,将其作为当前备用前置缓存区,并将其内部数据更新至哈希树;同时,将第二前置缓冲区作为当前活动前置缓存区;
当哈希树的空间大小达到阈值时,将哈希树持久化至磁盘。
进一步地,哈希树包括多个叶子节点、多个树节点及一个根节点;
其中,每个叶子节点中均存储有多个哈希签名;根节点和每个树节点中均存储有多个节点哈希签名;其中,节点哈希签名根据根节点/树节点的子节点数据生成。
进一步地,将哈希树持久化至磁盘包括以下步骤:
将哈希树中每个叶子节点的所有哈希签名均复制到磁盘中;
根据每个叶子节点的存储内容生成节点哈希签名,并更新至叶子节点对应的上一层的树节点中;
根据下一层的树节点的存储内容生成节点哈希签名,并更新至当前层的树节点中,直至当前层树节点为根节点;
根据根节点的存储内容生成根节点哈希签名,并存储至磁盘。
进一步地,将当前活动前置缓存区内部数据更新至哈希树、与将哈希树持久化至磁盘不同时进行。
进一步地,当根据每个叶子节点的存储内容生成节点哈希签名,并更新至叶子节点对应的上一层的树节点中时:
将叶子节点上一层对应的树节点的读写锁状态升级为写锁;
当根据下一层的树节点的存储内容生成节点哈希签名,并更新至当前层的树节点中时:
将当前层的树节点的读写锁状态升级为写锁。
进一步地,当读取数据时,依次从当前活动前置缓冲区、当前备用前置缓冲区和哈希树上进行检索。
进一步地,当从哈希树上进行检索时,自根节点向下遍历哈希树的每一层树节点,直至叶子节点,并将检索路径上的每一层的树节点及根节点的读写锁状态设置为读锁。
本发明的另一种技术方案:一种哈希树缓存装置,包括:
确定模块,用于根据写入数据的逻辑位置确定其在哈希树中的位置信息,其中,位置信息包括叶子节点及偏移量;
存储模块,用于将写入数据的哈希签名和位置信息存储在第一前置缓冲区;第一前置缓冲区为当前活动前置缓存区;
更新模块,用于当第一前置缓冲区写满后,将其作为当前备用前置缓存区,并将其内部数据更新至哈希树;同时,将第二前置缓冲区作为当前活动前置缓存区;
持久化模块,用于当哈希树的空间大小达到阈值时,将哈希树持久化至磁盘。
本发明的另一种技术方案:一种哈希树缓存装置,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现任一项上述的一种哈希树缓存方法。
本发明的另一种技术方案:一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现任一项上述的一种哈希树缓存方法。
本发明的有益效果是:在本发明中由于引入了第一前置缓冲区、第二前置缓冲区,使得读写数据对应了前置缓冲区,有效地隔离了上述两种互逆的哈希树操作,改进了哈希树操作的复杂度,可以实现用户读写任务与哈希树持久化并发执行,有效的提升了分布式存储系统的确定写性能。
附图说明
图1为本发明实施例一种哈希树缓存方法的流程图;
图2为本发明实施例中简化版哈希树的结构示意图;
图3为本发明实施例中前置缓冲区的应用场景图;
图4为本发明实施例一种哈希树缓存装置的结构图;
图5为本发明另一实施例一种哈希树缓存装置的结构图。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
在现有的哈希树操作中,无法调和哈希树上的各种修改操作,在同一时间只能运行其中一种操作,通过锁机制确保互斥访问。同时为了减低软件的设计复杂度,采用了一把巨型锁,导致在哈希树持久化的时候读写任务根本无法访问哈希树获取映射关系,阻塞了用户读写请求。总体来讲,现有技术方案除了无法支持合理的存储读写性能外,其性能波动也非常明显。
本发明中,巧妙地在内存中设置了一对前置缓冲区。用户写任务触发的哈希树映射关系变化,首先缓存在当前活动前置缓冲区内,当当前活动前置缓冲区写满的时候转为后台备用缓存区,批量更新到哈希树上。此时,当前的备用活动缓冲区转为活动前置缓存区,继续接受用户写任务带来的映射关系变化。当哈希树占用的系统内存达到一定水位时触发持久化操作,在持久化操作的同时两个前置缓冲区可以继续服务用户写任务,只要确保两个前置缓冲区有剩余空间接受新的映射关系变化,用户写任务就不会受到哈希树持久化的影响。
本发明公开了一种哈希树缓存方法,如图1所示,包括以下步骤:
S110、根据写入数据的逻辑位置确定其在哈希树中的位置信息,其中,位置信息包括叶子节点及偏移量;S120、将写入数据的哈希签名和位置信息存储在第一前置缓冲区;第一前置缓冲区为当前活动前置缓存区;S130、当第一前置缓冲区写满后,将其作为当前备用前置缓存区,并将其内部数据更新至哈希树;同时,将第二前置缓冲区作为当前活动前置缓存区;S140、当哈希树的空间大小达到阈值时,将哈希树持久化至磁盘。
在本发明中由于引入了第一前置缓冲区、第二前置缓冲区,使得读写数据对应了前置缓冲区,有效地隔离了上述两种互逆的哈希树操作,改进了哈希树操作的复杂度,可以实现用户读写任务与哈希树持久化并发执行,有效的提升了分布式存储系统的确定写性能。
通过上述的技术方案,可以改善分布式系统关于哈希树的多种并发任务的执行方式。任意时刻接收到的用户写任务,其触发的映射关系变化存入当前活动前置缓冲区,记录日志,写任务返回。任意时刻的用户读任务,当读取数据时,依次从当前活动前置缓冲区、当前备用前置缓冲区和哈希树上进行检索。
当前活动前置缓存区写满时,转为备用前置缓存区,备用前置缓冲区转为新的当前活动前置缓存区,同时,立即启动后台线程把备用前置缓存区的映射关系变化更新到哈希树,此时不允许哈希树持久化操作,以避免发生存储冲突,导致数据丢失。当哈希树占用的系统内存达到一定水位,即大于预定阈值时,启动后台线程持久化哈希树,同时为了数据冲突,此时不允许哈希树更新操作。
表1
读 | 写 | 持久化 | |
读 | √ | √ | √ |
写 | √ | √ | √ |
持久化 | √ | √ | √ |
表2
读 | 写 | 更新 | 持久化 | |
读 | √ | × | √ | √ |
写 | × | × | × | × |
更新 | √ | × | × | × |
持久化 | √ | × | × | × |
表1表示的是现有技术中所有哈希树操作类型并发关系矩阵,其中标记为√表示存在并发,标记×表示不存在并发。表2为本发明中所有哈希树操作类型并发关系矩阵。通过对比表1和表2可知,现有技术中,所有的哈希树操作都存在并发关系,尤其是写任务与持久化并发,全方位的并发关系导致哈希树操作必须充分考虑互斥操作以保证正确性。而本发明中,写任务完全从哈希树上转移到了一对前置缓冲区,唯一存在的并发关系是读任务与更新、以及督任务与持久化。本发明中在处理读任务时不会改变哈希树,这一特点降低了读任务与更新/持久化操作的锁管理难度,为优化锁管理粒度提供了基础。
为支持上述的改进与优化,本发明在实现中主要实现了下列软件组件:
“Merkle Tree”哈希树,基于哈希签名的方式管理连续的虚拟地址空间到不连续的物理地址空间的映射关系。
“Dual Pre-staged Buffer”双前置缓冲区,提供映射关系的高速缓存。双缓存结构支持完全隔离写任务对哈希树的更新。
“Flusher”持久化服务,基于有限状态机的方式管理哈希树的更新与持久化操作。
在本发明实施例中,哈希树包括多个叶子节点、多个树节点及一个根节点;其中,每个叶子节点中均存储有多个哈希签名;根节点和每个树节点中均存储有多个节点哈希签名;其中,节点哈希签名根据根节点/树节点的子节点数据生成。
在软件实现上,本实施例实用4KB大小的树节点,哈希签名大小20字节。由此可知,每一个树节点最多能够容纳204个映射。使用树的方式使得逻辑卷设备的连续地址空间可以映射到不同的物理地址空间,一颗哈希树对应一个逻辑卷设备。如图2所示,为简化叙述,本实施例中的哈希树只有三层且每个节点仅存放了三条映射,但这并不改变哈希树的工作原理。
在图2的哈希树结构中,包含如下树结点:
根结点:0;
树结点:1,2,3;
叶子结点:4,5,6,7,8,9;
其中,叶子节点存放了一系列哈希签名,这些哈希签名按照前后逻辑顺序组织在一起构成了这颗树所表达的连续空间(即一个逻辑卷设备)。一个哈希签名唯一对应一块4K大小数据块,通过逻辑相对位置找到对应的哈希签名,进而找到对应位置的数据。
例如,读任务访问第0地址开始的4K数据,从根节点0出发,经过树节点1,找到位于叶子结点4第1个位置的哈希签名是“dh0”,确定了本哈希树从第0地址开始的4K数据是一个哈希签名为“dh0”的4K数据块。当读任务访问第64K地址开始的4K数据,从根节点0出发,经过树节点2,找到位于叶子结点9第2个位置的哈希签名是“dh16”,确定了本哈希树从第64K地址开始的4K数据是一个哈希签名为“dh16”的4K数据块。当读任务访问第72K地址开始的4K数据,从根节点0出发,找到树节点3,其叶子结点9不存在,这种情况下直接返回默认的哈希签名,指向一个数据为全0的4K数据块。以此类推,根据逻辑相对位置,找到对应的哈希签名,进而找到对应的4K数据。
写任务正好相反,用户写入数据,计算哈希签名。根据写入的逻辑相对位置找到对应的叶子节点并计算出在叶子节点内的偏移量,在对应位置写入哈希签名。根结点和树结点的映射记录了其下一层子结点的哈希签名。通过这个方式层层向上收敛直到能够用一个4K节点存放所有的映射时,计算出该4K节点的哈希签名。该签名就是哈希树的唯一标识。通过此标识不仅可以找到哈希树管理的所有映射,同时能够校验用户数据的完整性。
关于前置缓冲区,如图3所示,为前置缓冲区的应用场景示意图。通过前置缓冲区的交替使用,当前活动前置缓存区写满后,用户写任务线程切换到另外一个。空闲前置缓冲区继续接收哈希树改动;同时触发缓冲区回写任务,将缓冲区所有的哈希树改动同步到哈希树。
在图3中,包括如下数据结构:
用户写任务:1,2,5;
缓冲区1,缓冲区2;
回写任务:3,4;
哈希树T。
用户写任务1向缓冲区1写入哈希树T,写入数据叶子节点的哈希签名会变化,与此同时回写任务4依次回写缓冲区2内所有的哈希树改动,直到缓冲区2为空。当缓存区1写满时,通过用户写任务5触发切换,后续的用户写任务2将使用缓冲区2写入哈希树改动,触发切换后回写任务3开始,依次回写缓存区1内所有的哈希树改动。通过这种方式,哈希树回写与持久化任务可以完全隔离,且还降低锁管理复杂度。
此时,需要注意的是,将当前活动前置缓存区内部数据更新至哈希树、与将哈希树持久化至磁盘不同时进行。
本发明还给出了的持久化方法的一种实施例,具体的,将哈希树持久化至磁盘包括以下步骤:
将哈希树中每个叶子节点的所有哈希签名均复制到磁盘中;根据每个叶子节点的存储内容生成节点哈希签名,并更新至叶子节点对应的上一层的树节点中;根据下一层的树节点的存储内容生成节点哈希签名,并更新至当前层的树节点中,直至当前层树节点为根节点;根据根节点的存储内容生成根节点哈希签名,并存储至磁盘。
用户写任务不停地写满前置缓冲区,触发切换,然后回写任务依次回写哈希树;直到哈希树占用的系统写内存达到设定的持久化水位时,开启持久化任务。
每一次用户写产生的哈希树改动通过回写任务仅仅是更新到了易失性内存中的哈希树结构,其叶子节点使用内存地址寻址找到下一级树节点,必须通过持久化任务将下级树节点的哈希值更新到上级树节点并写入底层存储,才能确保哈希树改动不丢失。
本实施例的哈希树持久化任务采用了改良的递归方式,自底向上对哈希树每一层节点进行持久化。由于用户写任务完全脱离了哈希树本身,本实施例的哈希树持久化任务,可以采用细粒度的读写锁管理方式最优化地支持持久化与用户读任务并发执行,极大地提升了读性能并改进了读延迟稳定性。
在持久化过程中,基于叶子节点已经持久化的前提,从哈希树根节点出发,向下遍历到叶子节点的上一层;减少递归调用层次。父节点锁与子节点锁的协同使用读写锁;自顶向下遍历哈希树时对每一层树节点获取对应的读锁,直到叶子节点的上一层节点。至此,从树根到当前树节点的路径上所有树节点已经获取到了读锁,当前树节点为叶子节点的父节点。在本实施例中,读锁的意思是该节点正在被读,其他节点可以读,但是,任何节点不能写。写锁的意思是,有节点在对该节点进行写操作,此时任何其他节点不能在该节点进行读写。
当根据每个叶子节点的存储内容生成节点哈希签名,并更新至叶子节点对应的上一层的树节点中时,将叶子节点对应的上一层树节点的读写锁状态升级为写锁,即升级当前树节点的读锁为写锁,以防止用户读任务进入当前树节点,修改该树节点对应位置的哈希签名为最新的叶子节点生成的哈希签名。依次计算当前树节点管理的所有叶子节点哈希值,并更新到该树节点的对应位置。完成后,降级当前树节点的写锁为读锁,允许用户读任务进入当前树节点。回退递归到当前树节点的上一层。其他树节点的持久化过程同样按照上述流程完成,直至哈希根节点,计算根节点哈希值。
当根据下一层的树节点的存储内容生成节点哈希签名,并更新至当前层的树节点中时:将下一层的树节对应的当前层的树节点的读写锁状态升级为写锁。需要注意的是,当前树节点的父节点依然为读锁,进而可以最大限度的支持并发用户读任务。
进一步地,当从哈希树上进行检索时,自根节点向下遍历哈希树的每一层树节点,直至叶子节点,并将检索路径上的每一层的树节点及根节点的读写锁状态设置为读锁。
在该实施例中,以图2所示的哈希树为例,其持久化顺序过程如下:
计算叶子节点4的哈希值,更新h4;计算叶子节点5的哈希值,更新h5;计算叶子节点6的哈希值,更新h6。
回退递归到中间层,计算中间节点1的哈希值,更新h1。依次类推,计算叶子节点7,8,9并更新h7,h8,h9,然后计算中间节点2的哈希值并更新h2。哈希值h3不变。计算根节点0的哈希值h0,该哈希值作为本哈希树的唯一标识符可以访问本树的所有树节点。
综上所述,本发明公开了一种改进的哈希树缓存方法,用于高效地解决哈希树更新与持久化的冲突:通过设置两个前置缓冲区,交替使用,可以缓存哈希树的改动。使用闭环的有限状态机管理哈希树的持久化。基于优化后的哈希树操作并发关系矩阵,细化了锁管理的粒度。使用独立的哈希树持久化线程。隔离I/O线程与哈希树持久化线程。进而,持久化哈希树期间允许并发读任务进入哈希树,提升了读性能。哈希树持久化与读写任务分离,降低了开发复杂度。采用双前置缓存机制,极大地降低了写任务时间成本。
本发明同时优化了哈希树操作在树节点上的锁粒度,最大限度地支持各种树操作的并发执行,改善了哈希树的锁互斥方式。移出了巨型写互斥锁,将树节点操作的锁区间控制在当前树节点的上一层与当前层,减少由于互斥锁带来的临界区操作,提升了读写性能。
本发明对分布式存储方案采用的哈希树进行了改进与优化,通过分解哈希树的操作方式,引入缓存池以空间换时间的方式解决了哈希树读写与持久化的内在冲突,在此基础上进一步优化了哈希树的锁管理方式,最小化锁粒度,减少不必要的临界区操作。
本发明还公开了另一种技术方案:一种哈希树缓存装置,如图4所示,包括:确定模块110,用于根据写入数据的逻辑位置确定其在哈希树中的位置信息,其中,位置信息包括叶子节点及偏移量;存储模块120,用于将写入数据的哈希签名和位置信息存储在第一前置缓冲区;第一前置缓冲区为当前活动前置缓存区;更新模块130,用于当第一前置缓冲区写满后,将其作为当前备用前置缓存区,并将其内部数据更新至哈希树;同时,将第二前置缓冲区作为当前活动前置缓存区;持久化模块140,用于当哈希树的空间大小达到阈值时,将哈希树持久化至磁盘。
需要说明的是,上述模块之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将所述装置的内部结构划分成不同的功模块,以完成以上描述的全部或者部分功能。实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。上述系统中模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本发明的另一实施例,还公开了一种哈希树缓存装置3,如图5所示,包括存储器31、处理器32以及存储在存储器中并可在处理器上运行的计算机程序33,处理器执行计算机程序时实现任一项上述的一种哈希树缓存方法。
本发明的另一实施例还公开了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现任一项上述的一种哈希树缓存方法。
所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
Claims (10)
1.一种哈希树缓存方法,其特征在于,包括以下步骤:
根据写入数据的逻辑位置确定其在哈希树中的位置信息,其中,所述位置信息包括叶子节点及偏移量;
将所述写入数据的哈希签名和所述位置信息存储在第一前置缓冲区;所述第一前置缓冲区为当前活动前置缓存区;
当所述第一前置缓冲区写满后,将其作为当前备用前置缓存区,并将其内部数据更新至哈希树;同时,将第二前置缓冲区作为当前活动前置缓存区;
当所述哈希树的空间大小达到阈值时,将所述哈希树持久化至磁盘。
2.如权利要求1所述的一种哈希树缓存方法,其特征在于,所述哈希树包括多个叶子节点、多个树节点及一个根节点;
其中,每个所述叶子节点中均存储有多个所述哈希签名;所述根节点和每个所述树节点中均存储有多个节点哈希签名;其中,所述节点哈希签名根据所述根节点/树节点的子节点数据生成。
3.如权利要求1所述的一种哈希树缓存方法,其特征在于,将所述哈希树持久化至磁盘包括以下步骤:
将哈希树中每个叶子节点的所有哈希签名均复制到所述磁盘中;
根据每个所述叶子节点的存储内容生成节点哈希签名,并更新至所述叶子节点对应的上一层的树节点中;
根据下一层的树节点的存储内容生成节点哈希签名,并更新至当前层的树节点中,直至当前层树节点为根节点;
根据所述根节点的存储内容生成根节点哈希签名,并存储至磁盘。
4.如权利要求3所述的一种哈希树缓存方法,其特征在于,将所述当前活动前置缓存区内部数据更新至哈希树、与将所述哈希树持久化至磁盘不同时进行。
5.如权利要求3或4所述的一种哈希树缓存方法,其特征在于,当根据每个所述叶子节点的存储内容生成节点哈希签名,并更新至所述叶子节点对应的上一层的树节点中时:
将所述叶子节点上一层对应的树节点的读写锁状态升级为写锁;
当根据下一层的树节点的存储内容生成节点哈希签名,并更新至当前层的树节点中时:
将当前层的树节点的读写锁状态升级为写锁。
6.如权利要求5所述的一种哈希树缓存方法,其特征在于,当读取数据时,依次从当前活动前置缓冲区、当前备用前置缓冲区和所述哈希树上进行检索。
7.如权利要求5所述的一种哈希树缓存方法,其特征在于,当从所述哈希树上进行检索时,自根节点向下遍历所述哈希树的每一层树节点,直至所述叶子节点,并将检索路径上的每一层的树节点及根节点的读写锁状态设置为读锁。
8.一种哈希树缓存装置,其特征在于,包括:
确定模块,用于根据写入数据的逻辑位置确定其在哈希树中的位置信息,其中,所述位置信息包括叶子节点及偏移量;
存储模块,用于将所述写入数据的哈希签名和所述位置信息存储在第一前置缓冲区;所述第一前置缓冲区为当前活动前置缓存区;
更新模块,用于当所述第一前置缓冲区写满后,将其作为当前备用前置缓存区,并将其内部数据更新至哈希树;同时,将第二前置缓冲区作为当前活动前置缓存区;
持久化模块,用于当所述哈希树的空间大小达到阈值时,将所述哈希树持久化至磁盘。
9.一种哈希树缓存装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的一种哈希树缓存方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的一种哈希树缓存方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011190181.0A CN112286873A (zh) | 2020-10-30 | 2020-10-30 | 一种哈希树缓存方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011190181.0A CN112286873A (zh) | 2020-10-30 | 2020-10-30 | 一种哈希树缓存方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112286873A true CN112286873A (zh) | 2021-01-29 |
Family
ID=74352500
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011190181.0A Pending CN112286873A (zh) | 2020-10-30 | 2020-10-30 | 一种哈希树缓存方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112286873A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113079172A (zh) * | 2021-04-13 | 2021-07-06 | 宁波和利时信息安全研究院有限公司 | 一种审计策略的匹配方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6304946B1 (en) * | 1999-07-01 | 2001-10-16 | Emc Corporation | System and method for optimizing cache write backs to disks |
CN103309767A (zh) * | 2012-03-08 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 一种客户端日志处理方法和装置 |
CN105095354A (zh) * | 2015-06-19 | 2015-11-25 | 北京奇虎科技有限公司 | 数据更新的方法及装置 |
CN111309523A (zh) * | 2020-02-16 | 2020-06-19 | 西安奥卡云数据科技有限公司 | 数据读写方法、数据远程复制方法及装置、分布式存储系统 |
CN111324305A (zh) * | 2020-02-16 | 2020-06-23 | 西安奥卡云数据科技有限公司 | 一种分布式存储系统中数据写入/读取方法 |
-
2020
- 2020-10-30 CN CN202011190181.0A patent/CN112286873A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6304946B1 (en) * | 1999-07-01 | 2001-10-16 | Emc Corporation | System and method for optimizing cache write backs to disks |
CN103309767A (zh) * | 2012-03-08 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 一种客户端日志处理方法和装置 |
CN105095354A (zh) * | 2015-06-19 | 2015-11-25 | 北京奇虎科技有限公司 | 数据更新的方法及装置 |
CN111309523A (zh) * | 2020-02-16 | 2020-06-19 | 西安奥卡云数据科技有限公司 | 数据读写方法、数据远程复制方法及装置、分布式存储系统 |
CN111324305A (zh) * | 2020-02-16 | 2020-06-23 | 西安奥卡云数据科技有限公司 | 一种分布式存储系统中数据写入/读取方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113079172A (zh) * | 2021-04-13 | 2021-07-06 | 宁波和利时信息安全研究院有限公司 | 一种审计策略的匹配方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3170106B1 (en) | High throughput data modifications using blind update operations | |
US8745012B2 (en) | Log-structured store for streaming data | |
EP2478442B1 (en) | Caching data between a database server and a storage system | |
CN102331993B (zh) | 分布式数据库的数据迁移方法和分布式数据库迁移系统 | |
US11269902B2 (en) | Time series data management method, device, and apparatus | |
CN100437590C (zh) | 预取对象的方法 | |
KR20160023871A (ko) | 다중 액세스 방법을 위한 래치-프리, 로그-구조 스토리지 | |
US20130290636A1 (en) | Managing memory | |
US11100083B2 (en) | Read only bufferpool | |
CN105701219A (zh) | 一种分布式缓存的实现方法 | |
US20200301906A1 (en) | Sparse infrastructure for tracking ad-hoc operation timestamps | |
WO2020211570A1 (zh) | 缓存处理方法、装置、设备及计算机可读存储介质 | |
CN110968269A (zh) | 基于scm与ssd的键值存储系统及读写请求处理方法 | |
US20090164524A1 (en) | Shadow-page deferred-update recovery technique integrating shadow page and deferred update techniques in a storage system | |
US10936500B1 (en) | Conditional cache persistence in database systems | |
CN106682139A (zh) | 一种基于Solr实现HBase多条件查询的方法及系统 | |
CN107888687B (zh) | 一种基于分布式存储系统的代理客户端存储加速方法及系统 | |
US11099998B2 (en) | Method and device for optimization of data caching | |
CN107766258B (zh) | 内存存储方法与装置、内存查询方法与装置 | |
US10289345B1 (en) | Contention and metadata write amplification reduction in log structured data storage mapping | |
KR20110046118A (ko) | 적응적 로깅 장치 및 방법 | |
US20220342888A1 (en) | Object tagging | |
CN111581218A (zh) | 一种利用双粒度加速访问基于日志结构合并树的键值数据存储的方法 | |
CN112286873A (zh) | 一种哈希树缓存方法及装置 | |
US10210067B1 (en) | Space accounting in presence of data storage pre-mapper |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 710000 Room 1202, 12th Floor, Cultural Creation Building, Yaodian Street Office, Qinhan New Town, Xixian New District, Xi'an, Shaanxi Applicant after: Xi'an Okayun Data Technology Co.,Ltd. Address before: No.6-2, Changxin Industrial Park, east section of Tiangong 1st Road, banxinzhuang village, ZhouLing street, Qinhan new town, Xixian New District, Xi'an City, Shaanxi Province, 710000 Applicant before: Xi'an Okayun Data Technology Co.,Ltd. |