CN110168532B - 数据更新方法和存储装置 - Google Patents
数据更新方法和存储装置 Download PDFInfo
- Publication number
- CN110168532B CN110168532B CN201780070813.XA CN201780070813A CN110168532B CN 110168532 B CN110168532 B CN 110168532B CN 201780070813 A CN201780070813 A CN 201780070813A CN 110168532 B CN110168532 B CN 110168532B
- Authority
- CN
- China
- Prior art keywords
- data
- storage area
- subtree
- key value
- storage
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种数据更新方法和存储装置,该方法由包含有第一存储区和第二存储区的存储设备执行,所述第一存储区的数据读写速度高于所述第二存储区的数据读写速度,该方法包括:根据第一数据的第一key值查找索引树以获得与第一key值对应的第一子树,第一数据存储于第一存储区中,该索引树包括M层,该索引树的前n层节点存储于第一存储区中,第一子树的根节点位于该索引树的前n层,第一子树的叶子节点中包括第二存储区中已存储的数据的信息;将第一数据从第一存储区写入第二存储区;根据第一key值更新第一子树,更新后的第一子树的第一叶子节点中包含有第一数据的信息。本申请提供的数据更新方法能够提高存储设备的存储性能。
Description
技术领域
本申请涉及计算机存储领域,尤其涉及一种数据更新方法和存储装置。
背景技术
在支持键-值(Key Value,KV)的存储系统中,可以通过查找关键字即键(Key),以快速确定Key所对应的值(Value),从而能够实现大规模实时处理业务的能力。日志结构合并树(Log Structure Merge Tree,LSM Tree)是KV数据库的主要算法结构。当需要更新数据时,可以通过逐层合并的方式将随机写变成顺序写,但由于磁盘等存储设备是以块为单位进行存储的,每次的读写操作都要以块为单位,因而在进行逐层合并时,需要把与该数据相关的整个数据块都读取到内存中与该数据进行合并,然后再写回到磁盘中,这样就导致的系统中的写放大很严重,进一步影响了数据存储性能的提升。
发明内容
本申请提供一种数据更新方法和存储装置,能够提高数据的读写效率。
第一方面,提供了一种数据更新方法,所述方法由包含有第一存储区和第二存储区的存储设备执行,所述第一存储区的数据读写速度高于所述第二存储区的数据读写速度,所述方法包括:根据第一数据的第一关键字key值查找索引树以获得与所述第一key值对应的第一子树,其中,所述第一数据存储于所述第一存储区中,所述索引树包括M层,所述索引树的前n层节点存储于所述第一存储区中,所述第一子树的根节点位于所述索引树的前n层,所述第一子树的叶子节点中包括第二存储区中已存储的数据的信息,M和n均为正整数,n小于或等于M;将所述第一数据从所述第一存储区写入所述第二存储区;根据所述第一key值更新所述第一子树,其中,更新后的所述第一子树的第一叶子节点中包含有所述第一数据的信息。
在本申请提供的数据更新方法中,将存储设备中的存储区进行了分区,其中,第一存储区的读写性能优于第二存储区的读写性能。并且将索引树的前n层节点存储于所述第一存储区中,且该索引树的第一子树的根节点也位于所述索引树的前n层,从而使得在数据更新过程中,与现有技术中需要逐层合并各级索引树的方式相比,能够通过待写入数据的第一key值快速查找到对应的第一子树,提高了查找速度。并且,本申请中,能够基于第一子树实现第一存储区与第二存储区中数据的合并,从而可以减少现有技术中因为逐层合并带来的写放大问题。
应理解,该索引树的前n层存储在第一存储区中,该第一子树的根节点位于该索引树的前n层,n是小于或等于索引树的总层数M的,因而该第一子树的根节点也就位于第一存储区中。特别地,该第一子树的根节点位于该索引树的第n层,即位于第一存储区的该索引树的前n层中,第一子树的根节点为这n层中的最后一层。例如,该索引树的总层数为5,其中前3层存储在第一存储区,该第一子树的根节点位于索引树的第3层。
还应理解,与该第一key值对应的第一子树,是指该第一key值位于该第一子树对应的key值范围内。
其中,可选地,该第一数据的信息可以包括以下信息中的至少一种:第一数据的值(value)、第一数据的第一key值、第一数据的地址(或链接)、第一key值的地址(或链接)等。
其中,可选地,该第二数据的信息可以包括以下信息中的至少一种:第二数据的值(value)、第二数据的第一key值、第二数据的地址(或链接)、第二key值的地址(或链接)等。
可选地,在第一方面的一种实现方式中,所述方法还包括:接收写请求,所述写请求中包含有待写入的所述第一数据以及所述第一key值;将所述第一数据以及所述第一key值写入所述第一存储区。
根据这种方式,将新写入数据先写入所述第一存储区中,由于第一存储区的读写性能较优,从而提高了数据写入速度。并且,在将数据写入第一存储区中之后,再从所述第一存储区转移到所述第二存储区中的方式也减少了直接在第二存储区进行数据更新所带来的写放大的问题,从而提高了数据存储性能。
可选地,在第一方面的一种实现方式中,所述方法还包括:接收读请求,所述读请求中包含有第二数据的第二key值;当根据所述第二key值在所述第一存储区中未找到所述第二数据时,根据所述第二key值查找所述索引树以获得与所述第二key值对应的第二子树,其中,所述第二子树的根节点位于所述索引树的前n层;根据所述第二子树的第二叶子节点中包含的所述第二数据的信息从所述第二存储区中读取所述第二数据,其中,所述第二叶子节点为根据所述第二key值查找到的叶子节点。
可选地,在第一方面的一种实现方式中,所述将所述第一数据从所述第一存储区写入所述第二存储区包括:当所述第一存储区的剩余存储空间小于第一阈值且所述第一子树的读写次数满足所述第二阈值时,将所述第一数据从所述第一存储区写入所述第二存储区。
可选地,如果对索引树的多次读操作中,每次读操作对应的索引范围覆盖多个子树,且这多个子树中存在一定数量的冷子树(访问频率过小的子树)或叶子结点较少的子树,那么可以对这多个子树进行合并,对这多个子树进行合并之前,需要将这些子树对应的key值所索引的数据从第一存储区写入第二存储区。
第二方面,提供了一种存储装置,该存储装置可以用于执行前述第一方面及各种实现方式中所述的存储方法中的各个过程。所述存储装置包括存储模块和处理模块,所述存储模块包括第一存储区和第二存储区,所述第一存储区的数据读写速度高于所述第二存储区的数据读写速度,所述处理模块用于:根据第一数据的第一关键字key值查找索引树以获得与所述第一key值对应的第一子树,其中,所述第一数据存储于所述第一存储区中,所述索引树包括M层,所述索引树的前n层节点存储于所述第一存储区中,所述第一子树的根节点位于所述索引树的前n层,所述第一子树的叶子节点中包括第二存储区中已存储的数据的信息,M和n均为正整数,n小于或等于M;将所述第一数据从所述第一存储区写入所述第二存储区;根据所述第一key值更新所述第一子树,其中,更新后的所述第一子树的第一叶子节点中包含有所述第一数据的信息。
可选地,在第二方面的一种实现方式中,所述处理模块还用于:接收写请求,所述写请求中包含有待写入的所述第一数据以及所述第一key值;将所述第一数据以及所述第一key值写入所述第一存储区。
可选地,在第二方面的一种实现方式中,所述处理模块还用于:接收读请求,所述读请求中包含有第二数据的第二key值;当根据所述第二key值在所述第一存储区中未找到所述第二数据时,根据所述第二key值查找所述索引树以获得与所述第二key值对应的第二子树,其中,所述第二子树的根节点位于所述索引树的前n层;根据所述第二子树的第二叶子节点中包含的所述第二数据的信息从所述第二存储区中读取所述第二数据,其中,所述第二叶子节点为根据所述第二key值查找到的叶子节点。
可选地,在第二方面的一种实现方式中,所述处理模块具体用于:当所述第一存储区的剩余存储空间小于第一阈值且所述第一子树的读写次数满足所述第二阈值时,将所述第一数据从所述第一存储区写入所述第二存储区。
可选地,在第二方面的一种实现方式中,所述第一存储区包括非易失性存储介质。
第三方面,提供了一种存储设备,该存储设备包括收发器、处理器和存储器。所述存储器存储了程序,所述处理器执行所述程序,以用于执行前述第一方面及各种实现方式中所述的数据更新方法中的各个过程。
第四方面,提供了一种计算机,包括处理器和存储器;所述存储器用于存储计算机执行指令,所述处理器和所述存储器之间通过内部连接通路互相通信,当所述计算机运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述计算机执行前述第一方面及各种实现方式中所述的数据更新方法中的各个过程。
第五方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有程序,所述程序使得上述装置执行上述第一方面及其各种实现方式中的任一种数据更新方法。
第六方面,提供了一种系统芯片,该系统芯片包括输入接口、输出接口、处理器和存储器,该处理器用于执行该存储器存储的指令,当该指令被执行时,该处理器可以实现前述第一方面及其各种实现方式中的任一种方法。
附图说明
图1是现有技术中数据存储的示意图。
图2是本申请实施例的数据更新方法的示意性流程图。
图3是本申请另一实施例的数据更新方法的示意性流程图。
图4是本申请另一实施例的数据更新方法的示意性流程图。
图5是本申请实施例的存储装置的示意架构图。
图6是本申请实施例的存储装置的示意性框图。
图7是本申请实施例的存储设备的示意性结构图。
图8是本申请实施例的系统芯片的示意性结构图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
应理解,本申请实施例所述的数据更新方法可以应用于支持键-值的存储系统。在支持键-值的存储系统中,数据是以键-值为存储单元的,多对键-值保存在对应的文件中,可以通过查找键-值(Key Value)中的关键字Key,以快速确定该关键字Key所对应的数据值Value,从而能够实现大规模实时处理业务的能力。
现有技术中,在当需要更新数据时,首先将更新的数据顺序写到磁盘日志中,然后在内存缓存中执行该数据更新,如图1所示,当内存中的数据量到达一定阈值,直接转存至磁盘的等级(Level)0层文件;当Level 0层文件的数据量积累到一定程度,便与Level 1层文件合并,并将合并后的新文件存储至Level 1层,同时删除冗余数据;当Level 1层文件的数据量积累到一定程度,便与Level 2层文件合并,并将合并后的新文件存储至Level 2层,同时删除冗余数据;依次类推,形成数量更少、存储量更大的文件。这样的逐层合并导致的写放大很严重。例如,如果上一层只有少量数据需要合并至下一层,本来只需要把该少量数据写入下一层,但由于磁盘等存储设备是以块为单位进行存储的,每次的读写操作都要以数据块为单位,所以这时需要把与该数据相关的整个数据块都读取到内存中与该数据进行合并,然后再写回到磁盘中,这样,写入的就是一个数据块的数据量。因此,这种逐层合并的方式导致的写放大很严重,进一步对数据存储性能的提升带来了影响。
而对于读操作,当需要读取某个数据时,首先在内存表(memtable)中查找该数据对应的Key,如果没有找到该Key,就会逆序逐层检查各层数据的索引文件,即字符串表(Sorted String Table,SSTable),直到该Key被找到。每个SSTable都是有序的,查找速度随着SSTable个数的增加而变慢,时间复杂度为O(K log N),其中K为sstable文件的个数,N为SSTable的平均大小。因此,写操作的复杂度也限制了数据存储性能的提升。
本申请实施例提供了一种数据更新方法,用于提高存储性能。应理解,本申请实施例中的写操作可以包括写入新的数据(put)或者更新数据(update)等操作,本申请实施例中的读操作可以包括对数据的读取(get)或者范围查询(range query)等操作。
图2是本申请实施例的数据更新方法的示意性流程图。该方法由包含有第一存储区和第二存储区的存储设备执行,该第一存储区的数据读写速度,高于该第二存储区的数据读写速度,该存储设备通过索引树访问第二存储区中存储的数据,该索引树包括M层,该索引树的前n层存储在第一存储区,M和n均为正整数且n小于或等于所述索引树的总层数M。该索引树可以是任何类型的索引树例如二叉树、平衡多路查找树(Balance MultipleSearch Trees,B-Tree,B+Tree)等,本申请不做限定。
应理解,该第一存储区例如可以为存储级内存(Storage-Class Memory,SCM)或者其他以字节为寻址粒度的非易失性存储介质;该第二存储区例如可以为NAND闪存(NANDFlash)或硬盘驱动器(Hard Disk Drive,HDD)等。由于第一存储区采用的是快速存储介质,第二存储区采用的是慢速存储介质,因而该第一存储区的数据读写速度,高于该第二存储区的数据读写速度,即第一存储区的访问性能优于第二存储区。
还应理解,该索引树用于访问第二存储区中的数据,但由于索引树的上层的访问频繁较高,因而可以将该索引树的前n层存储在第一存储区中。当n小于该索引树的总层数时,该索引树的部分层存储在第一存储区,而当n等于该索引树的总层数时,整个索引树都存储在第一存储区。但是考虑到对于第二存储区例如存储级内存SCM等,目前受到制造成本和存储空间的限制,因而可以优先考虑将该索引树的一部分即前几层存储在第一存储区,剩余层存储在第二存储区。如果未来第二存储区例如存储级内存SCM等足够便宜,空间足够大,整个索引树也可以都存储在第二存储区,这里不做限定。
如图2所示,该数据更新方法可以包括以下步骤:
在210中,根据第一数据的第一关键字key值查找索引树以获得与该第一key值对应的第一子树。
其中,该第一数据存储于该第一存储区中,该索引树包括M层,该索引树的前n层节点存储于第一存储区中,该第一子树的根节点位于该索引树的前n层,该第一子树的叶子节点中包括第二存储区中已存储的数据的信息,M和n均为正整数,n小于或等于M。
这里首先简单阐述一下索引树的节点。在一个索引树中,索引树的节点分为根节点、叶子节点、父节点和子节点这四类。子节点是父节点的下一层节点,一个节点如果有上一级,则称这个上一级是它的父节点,如果没有上一级,则这个节点则无父节点。一棵树当中没有子节点的节点,称为叶子节点。在当前节点之上已经没有其他的节点,这个节点叫做根节点。本申请实施例中的节点也可以写作结点。
应理解,该索引树的前n层存储在第一存储区中,该第一子树的根节点位于该索引树的前n层,n是小于或等于索引树的总层数M的,因而该第一子树的根节点也就位于第一存储区中。特别地,该第一子树的根节点位于该索引树的第n层,即位于第一存储区的该索引树的前n层中,第一子树的根节点为这n层中的最后一层。例如,该索引树的总层数为5,其中前3层存储在第一存储区,该第一子树的根节点位于索引树的第3层。
还应理解,与该第一key值对应的第一子树,是指该第一key值位于该第一子树对应的key值范围内。
还应理解,在支持键-值的存储系统中,数据可以通过键-值对(Key Value)的形式进行存储。本申请实施例中,第一存储区和第二存储区中存储的数据可以包括该数据的值和该数据对应的索引,例如这里所说的第一数据,就包括第一数据的值以及第一数据的索引,第一数据的索引就是键-值对中的键Key,第一数据的值就是键-值对中的值Value。通过第一数据的Key,就可以快速查找到与该Key对应的Value。不同的数据可以通过索引树进行管理,在进行数据读写时,通过该索引树,可以第一通过数据的索引确定其对应的数据所在的数据块,从而实现对该数据的访问。
例如,对于学生管理数据库,存储的是学生的学号和姓名,其中,学号作为键Key,姓名作为值Value,如果是向该学生管理数据库中写入新的数据,则执行put(0600100,陈美玲),即向该学生管理数据库中添加(0600100,陈美玲)这样的一对键-值。
如果是对该学生管理数据库中的数据进行更新,假设已经写入了(0600100,陈美玲),即已经向该学生管理数据库中添加了(0600100,陈美玲)这样的一对键-值,现在陈美玲改名为陈美丽,则需要将(0600100,陈美玲)更新为(0600100,陈美丽),执行update(0600100,陈美丽)。这样,数据库中的(0600100,陈美玲)就变成了(0600100,陈美丽)。数据的更新操作是针对已经存在的Key对应的Value进行更新,写操作则是增加新的键-值(Key,Value)。
在220中,将该第一数据从第一存储区写入第二存储区。
具体地,存储设备可以将第一存储区域中存储的第一数据,写入第二存储区中。也就是说,第一存储区中与该第一子树对应的key值所索引的数据,与第二存储区中与该第一子树对应key值所索引的数据,可以进行数据合并,即按照第一存储区和第二存储区中的这些数据的索引大小,对数据进行重排并进行重新存储。合并后的这些数据,会被存储在第二存储区中。这样,由于第一存储区中的数据,被转移至第二存储区中,因而第一存储区中的存储空间就能够被释放。
可选地,在220中,将该第一数据从第一存储区写入第二存储区,包括:当第一存储区的剩余存储空间小于第一阈值且第一子树的读写次数满足第二阈值时,将第一数据从第一存储区写入第二存储区。
具体地,将第一数据从第一存储区写入第二存储区的时机可以根据当时第一存储区的剩余存储空间的大小来确定,当第一存储区的剩余存储空间不足例如小于第一阈值时,会启动数据的转移即将数据从第一存储区写入第二存储区。这时,存储设备首先会在根节点位于前n层例如第n层的所有子树中,选择满足条件的至少一个子树,该至少一个子树例如包括上述的第一子树,并且根据该至少一个子树将第一存储区中的数据写入第二存储区。也就是说,当第一存储区的剩余存储空间不足时,才触发对索引树中每个子树是否满足该条件的判断,从而将根节点位于第n层且满足条件的子树对应的key值所索引的数据从第一存储区写入第二存储区。
该至少一个子树所满足的条件例如可以包括以下中的任意一种:将子树对应的key值所索引的数据从第一存储区写入第二存储区后能够释放的存储空间大于一个预设的阈值;子树的写操作次数与读操作次数的比值大于一个预设的阈值;子树对应的读操作频率和/或写操作频率小于一个预设的阈值。下面以第一子树为例,具体针对这三种条件进行描述。
方式1
对第一子树执行该子树内合并操作后能够释放的存储空间,大于预设的阈值。
具体地,将第一数据从第一存储区写入第二存储区的首要目的是释放快速存储区的存储空间,因而当快速存储区的存储空间不足时,可以根据将每个子树对应的key所索引的第一数据从第一存储区写入第二存储区后所能够释放的存储空间的大小,来决定将哪些子树对应的key值所索引的数据从第一存储区写入第二存储区。例如,若将第一子树对应的key值(包括第一key值)所索引的数据(包括第一数据)从第一存储区写入第二存储区后能够释放的存储空间的大小大于一个预设的阈值,那么存储设备可以将第一子树对应的key值所索引的数据从第一存储区写入第二存储区。
方式2
第一子树的写操作次数与第一子树的读操作次数的比值,大于预设的阈值。
具体地,这里可以尽可能选择写操作多,读操作少的子树,从而将这类子树对应的key值所索引的数据从第一存储区写入第二存储区。例如,以第一子树的写操作次数与第一子树的读操作次数的比值作为衡量,若第一子树的写操作次数与第一子树的读操作次数的比值大于一个预设的阈值时,将第一子树对应的key值(包括第一key值)所索引的数据(包括第一数据)从第一存储区写入第二存储区。因为在第一存储区中读操作速度较快,而在第二存储区中读操作速度较慢,如果第一子树在第一存储区对应的数据有较多的读操作,则尽可能把数据留在第一存储区,这样就可以加块系统的读操作速度。
应理解,第一子树的写操作,是指写入的数据的key值位于第一子树对应的key值范围的;第一子树对应的读操作,是指读取的数据的key值是位于第一子树对应的key值范围的。
方式3
第一子树对应的读操作频率和/或写操作频率,小于预设的阈值。
具体地,还有一种情况,存在一些子树,其对应的读操作和写操作都比较少,子树的读操作频率和/或写操作频率很低,即子树处于冷状态,对于这类子树,也可以将这类子树对应的key值所索引的数据从第一存储区写入第二存储区。例如,如果第一子树的读操作频率和/或写操作频率小于一个预设的阈值,那么可以将第一子树对应的key值(包括第一key值)所索引的数据(包括第一数据)从第一存储区写入第二存储区。
可选地,在具体实现时,存储设备中每次执行写操作或读操作以后,可以对输入/输出(Input/Output,I/O)统计信息进行更新,该I/O统计信息例如可以包括以下中的至少一种:针对每个子树的写操作(包括put操作和update操作)次数之和、读(get)操作次数、读操作的索引范围、对该索引范围的查询次数、以及每次操作的时间戳记录例如执行写操作的时间信息、执行更新操作的时间信息、执行读操作的时间信息等。
在230中,根据第一key值更新该第一子树。
其中,更新后的该第一子树的第一叶子节点中包含有该第一数据的信息。
具体地,存储设备将第一数据由第一存储区写入第二存储区后,还要根据第一key值更新第一子树,更新后的该第一子树中的第一叶子节点中包括该第一数据的信息。另外,该第一叶子节点可以为第一子树中的任意一个叶子结点。
可选地,该第一数据的信息可以包括以下信息中的至少一种:第一数据的值(value)、第一数据的第一key值、第一数据的地址(或链接)、第一key值的地址(或链接)等。
因此,将存储设备中的存储区进行了分区,其中,第一存储区的读写性能优于第二存储区的读写性能。并且将索引树的前n层节点存储于所述第一存储区中,且该索引树的第一子树的根节点也位于所述索引树的前n层,从而使得在数据更新过程中,与现有技术中需要逐层合并各级索引树的方式相比,能够通过待写入数据的第一key值快速查找到对应的第一子树,提高了查找速度。并且,本申请中,能够基于第一子树实现第一存储区与第二存储区中数据的合并,从而可以减少现有技术中因为逐层合并带来的写放大问题。
可选地,如图3所示,在210之前,该方法还包括240和250。
在240中,接收写请求,该写请求中包含有待写入的该第一数据以及该第一key值。
在250中,将该第一数据以及该第一key值写入该第一存储区。
具体来说,当执行写操作时,存储设备可以首先将接收到的数据存储至第一存储区中进行临时管理。第一存储区在写数据时并不是通过逐层合并的方式,而是例如可以按照字节为粒度写入数据,因而将数据写入第一存储区的速度要明显高于将数据写入第二存储区的速度,避免了写放大的问题。
根据这种方式,将新写入数据先写入所述第一存储区中,由于第一存储区的读写性能较优,从而提高了数据写入速度。并且,在将数据写入第一存储区中之后,再从所述第一存储区转移到所述第二存储区中的方式也减少了直接在第二存储区进行数据更新所带来的写放大的问题,从而提高了数据存储性能。
可选地,如图4所示,该方法还包括:
在260中,接收读请求,该读请求中包含有第二数据的第二key值。
在270中,当根据该第二key值在该第一存储区中未找到该第二数据时,根据该第二key值查找该索引树以获得与该第二key值对应的第二子树。
其中,该第二子树的根节点位于该索引树的前n层。
在280中,根据该第二子树的第二叶子节点中包含的该第二数据的信息从该第二存储区中读取该第二数据。
其中,该第二叶子节点为根据该第二key值查找到的叶子节点。可选地,该第二数据的信息包括以下信息中的至少一种:第二数据的值(value)、第二数据的第二key值、第二数据的地址(或链接)、第二key值的地址(或链接)等。
具体地,在需要读取数据时,存储设备首先根据该第二key值在第一存储区中查找第二数据,若在第一存储区中查找到第二数据,则直接读取该第二数据。由于第一存储区中也存储了部分数据,这部分数据如果还没有被写入第二存储区,那么存储设备就可以在第一存储区中查找到这些数据。由于第一存储区的数据访问速度明显高于第二存储区的数据访问速度,因而可以实现对数据的快速读取。
如果第一存储区中的数据例如第二数据已经被写入第二存储区,那么存储设备在第一存储区中可能查找不到第二数据的索引,这时,存储设备需要根据该第二key值查找该索引树以获得与该第二key值对应的第二子树,并根据该第二子树的第二叶子节点中包含的该第二数据的信息从该第二存储区中读取该第二数据。
下面结合图5以一个详细的示例描述本申请实施例的数据更新方法。图5是本申请实施例的数据更新方法的示意图。图5中示出了第一存储区和第二存储区,第一存储区为第一存储介质SCM,第二存储区为NAND Flash或HDD,并且,该第一存储区包括数据区和索引区这两个部分,该数据区用于存储数据,该索引区用于存储索引树。这里假设该索引树为平衡多路查找树B+Tree。第二存储区用于存储索引树和数据。应理解,第一存储区可以采用一个存储介质,该存储介质被划分为数据区和索引区,或者,该数据区和该索引区可以分别使用不同的存储介质,这里不做限定。
该存储设备中用于在第二存储区中查找数据的索引树的总层数为5,且前3层存储在第一存储区的索引区中,后2层存储在第二存储区中。如图5所示,该索引树以节点A为根节点,其中,A节点的子节点包括节点B和节点P,其中,节点B的子节点包括节点C和节点I,依次,节点C的子节点包括节点D和节点E,节点D的子节点包括节点F、节点G和节点H。节点F、节点G和节点H为整个索引树的叶子节点。
当写入数据例如写入第一数据时,并不会像现有技术将第一数据写入第二存储区,而是将第一数据写入第一存储区的数据区中,第一存储区的数据写入速度要明显快于第二存储区,因而第一数据能够第一被写入。
但是,用户每次写入的数据都被写入第一存储区,就会导致第一存储区的存储空间不断减少,当第一存储区的存储空间减少至一定程度,例如小于一个空间阈值时,存储设备会将数据从第一存储区写入第二存储区,以释放第一存储区的存储空间。存储设备具体将哪些数据转移至第二存储区,可以在根节点位于第3层的多个子树中,选择满足一定条件的子树,并将满足该条件的子树对应的key值所索引的数据,从第一存储区写入第二存储区。存储设备具体可以根据将子树对应的key值所索引的数据从第一存储区写入第二存储区后能够释放的存储空间能够释放的存储空间的大小,或者每个子树对应的读写操作次数,判断每个子树是否满足该合并条件。
例如,如图5所示,该索引树中根节点位于第3层的多个子树包括第一子树和第二子树,当第一存储区中的存储空间不足时,则存储设备判断第一子树和第二子树是否满足预设的条件例如每个子树对应的读写操作次数是否达到一定阈值,假设第一子树满足预设的条件,则存储设备将第一子树对应的key值所索引的数据,从第一存储区写入第二存储区。即,将第一存储区中第一子树包括的数据,和第二存储区中第一子树包括的数据,读取到内存中,并按数据的键Key进行排序,并且将排序后的数据由内存转移至第二存储区中,从而存储在第二存储区中相应的位置。这样,第一存储区中的存储空间就能够得到释放。如图5所示,第一存储区中与第一子树对应的key值所索引的数据包括(Key 1,Value 1)、(Key2,Value 2)和(Key 4,Value 4),第二存储区中与第一子树对应的key值所索引的数据(Key3,Value 3)、(Key 5,Value 5)和(Key 6,Value 6),对这些数据按照Key的大小进行重排后,形成合并后的数据(Key 1,Value 1)、(Key 2,Value 2)、(Key 3,Value 3)、(Key 4,Value 4)、(Key 5,Value 5)和(Key 6,Value 6),这些合并后的数据会被存储在第二存储区中。
这里,与第一子树对应的key值所索引的数据,是指位于第一子树的key值范围内的key值所对应的数据,例如,第一子树对应的key值范围为10-25,若第一数据的第一key值为15,第一key值15位于第一子树的key值范围10-25,因而第一子树对应的key值所索引的数据中就包括第一数据。
应理解,图5中,第一存储区和第二存储区中与第一子树对应的数据在进行存储时,可以像图5中所示,在数据块中存储数据的键-值对(Key,Value),例如第二存储区左下角虚线框中的数据在进行存储时需要存储该数据的键-值对比如(Key 3,Value 3)。但是,在一些情况下,由于叶子节点F已经存储了该数据的键Key 3,那么在进行数据存储时,数据块中也可以只存储Value 3,即第二存储区左下角虚线框中仅存储Value 3而不用存储完整的(Key 3,Value 3)。本申请实施例对数据块中的数据存储形式不作任何限定。
还应理解,在第一存储区中对数据进行临时管理时,也可以通过索引树的方式进行管理,例如图5中第一存储区的索引区中阴影示出的小方格,可以代表以节点C为父节点的三个子节点,这三个子节点分别管理不同索引范围的数据,这三个子节点下还可以包括其他子节点,这里没有画出。前面提到以节点A为根节点的索引树是用于在第二索引区中访问数据的索引树,与这里用于对第一存储区中的数据进行临时管理的索引树,是不同的索引树。由于第一存储区中存储的数据量一般较小,且通常以字节为粒度进行数据读写,因而第一存储区中也可以不通过索引树的方式对数据进行临时管理,而通过表格、列表等方式等更简单的方式对数据进行管理,本申请实施例中不做限定。没有特别指出的情况下,本申请实施例中的索引树均指用于访问第二存储区的数据的索引树,即图5中以节点A为根节点的5层索引树。
上面结合图5举例说明了基于本申请数据更新方法的写操作的过程,下面结合图5举例说明读操作的过程。
举例来说,如果要查找第二数据(Key 3,Value 3),首先在第一存储区的索引区中查找待读取的第二数据的第二key值Key 3,如果在第一存储区查找到Key 3,则根据Key 3在第一存储区的数据区读取第二数据(Key 3,Value 3)。如果像图5中所示,在第一存储区无法查找到第二数据的第二key值Key 3,则根据索引树,从索引树的根节点即A节点开始逐层查找Key 3所在的叶子节点,假设在第二存储区中的叶子节点F中查找到Key 3,则根据查找到的Key 3后,从第二存储区与Key 3对应的数据块中读取数据(Key 3,Value 3)。
可选地,如果对索引树的多次读操作中,每次读操作对应的索引范围覆盖多个子树,且这多个子树中存在一定数量的冷子树(访问频率过小的子树)或叶子结点较少的子树,那么可以对这多个子树进行合并。其中,在对这多个子树进行合并之前,需要将这些子树对应的key值所索引的数据从第一存储区写入第二存储区。对多个子树进行合并的过程和现有技术中多个子树合并的过程相同,为了简洁,这里不再赘述。
仍以图5为例,如果对索引树的多次读操作中,每次读操作对应的索引范围都覆盖第一子树和第二子树,且第一子树和第二子树中至少有一个子树为冷子树或至少有一个子树的叶子结点少于一定数量,那么可以对第一子树和第二子树进行合并,这时,第一子树和第二子树对应的key值所索引的数据已经从第一存储区写入第二存储区。对第一子树和第二子树进行合并后,第一子树和第二子树就可以合成一个新的子树,这个新的子树的父节点同样为节点B。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
下面将结合图6至图8,描述根据本申请实施例的存储装置,方法实施例所描述的技术特征可以适用于以下装置实施例。
图6是根据本申请实施例的存储装置600的示意性框图。如图6所示,所述存储装置包括存储模块610和处理模块620,所述存储模块610包括第一存储区和第二存储区,所述第一存储区的数据读写速度高于所述第二存储区的数据读写速度,所述处理模块620用于:
根据第一数据的第一关键字key值查找索引树以获得与所述第一key值对应的第一子树,其中,所述第一数据存储于所述第一存储区中,所述索引树包括M层,所述索引树的前n层节点存储于所述第一存储区中,所述第一子树的根节点位于所述索引树的前n层,所述第一子树的叶子节点中包括第二存储区中已存储的数据的信息,M和n均为正整数,n小于或等于M;将所述第一数据从所述第一存储区写入所述第二存储区;根据所述第一key值更新所述第一子树,其中,更新后的所述第一子树的第一叶子节点中包含有所述第一数据的信息。
因此,将存储设备中的存储区进行了分区,其中,第一存储区的读写性能优于第二存储区的读写性能。并且将索引树的前n层节点存储于所述第一存储区中,且该索引树的第一子树的根节点也位于所述索引树的前n层,从而使得在数据更新过程中,与现有技术中需要逐层合并各级索引树的方式相比,能够通过待写入数据的第一key值快速查找到对应的第一子树,提高了查找速度。并且,本申请中,能够基于第一子树实现第一存储区与第二存储区中数据的合并,从而可以减少现有技术中因为逐层合并带来的写放大问题。
可选地,所述处理模块620还用于:接收写请求,所述写请求中包含有待写入的所述第一数据以及所述第一key值;将所述第一数据以及所述第一key值写入所述第一存储区。
根据这种方式,将新写入数据先写入所述第一存储区中,由于第一存储区的读写性能较优,从而提高了数据写入速度。并且,在将数据写入第一存储区中之后,再从所述第一存储区转移到所述第二存储区中的方式也减少了直接在第二存储区进行数据更新所带来的写放大的问题,从而提高了数据存储性能。
可选地,所述处理模块620还用于:接收读请求,所述读请求中包含有第二数据的第二key值;当根据所述第二key值在所述第一存储区中未找到所述第二数据时,根据所述第二key值查找所述索引树以获得与所述第二key值对应的第二子树,其中,所述第二子树的根节点位于所述索引树的前n层;根据所述第二子树的第二叶子节点中包含的所述第二数据的信息从所述第二存储区中读取所述第二数据,其中,所述第二叶子节点为根据所述第二key值查找到的叶子节点。
可选地,所述处理模块620具体用于:当所述第一存储区的剩余存储空间小于第一阈值且所述第一子树的读写次数满足所述第二阈值时,将所述第一数据从所述第一存储区写入所述第二存储区。
可选地,所述第一存储区包括非易失性存储介质。
图7是根据本申请实施例的存储设备700的示意性框图。该存储设备可以包括图6所示的存储装置600,该存储设备例如可以为计算机、服务器等用于存储数据的设备。如图7所示,该存储设备700包括处理器710、收发器720和存储器730,其中,该处理器710、收发器720和存储器730之间通过内部连接通路互相通信。该存储器730用于存储文件中的数据以及指令,该处理器710用于执行该存储器730存储的指令,以控制该收发器720接收信号或发送信号。其中,该存储器730包括第一存储区和第二存储区,所述第一存储区的数据读写速度高于所述第二存储区的数据读写速度,该处理器710用于:
根据第一数据的第一关键字key值查找索引树以获得与所述第一key值对应的第一子树,其中,所述第一数据存储于所述第一存储区中,所述索引树包括M层,所述索引树的前n层节点存储于所述第一存储区中,所述第一子树的根节点位于所述索引树的前n层,所述第一子树的叶子节点中包括第二存储区中已存储的数据的信息,M和n均为正整数,n小于或等于M;将所述第一数据从所述第一存储区写入所述第二存储区;根据所述第一key值更新所述第一子树,其中,更新后的所述第一子树的第一叶子节点中包含有所述第一数据的信息。
因此,将存储设备中的存储区进行了分区,其中,第一存储区的读写性能优于第二存储区的读写性能。并且将索引树的前n层节点存储于所述第一存储区中,且该索引树的第一子树的根节点也位于所述索引树的前n层,从而使得在数据更新过程中,与现有技术中需要逐层合并各级索引树的方式相比,能够通过待写入数据的第一key值快速查找到对应的第一子树,提高了查找速度。并且,本申请中,能够基于第一子树实现第一存储区与第二存储区中数据的合并,从而可以减少现有技术中因为逐层合并带来的写放大问题。
可选地,所述处理器710还用于:接收写请求,所述写请求中包含有待写入的所述第一数据以及所述第一key值;将所述第一数据以及所述第一key值写入所述第一存储区。
可选地,所述处理器710还用于:接收读请求,所述读请求中包含有第二数据的第二key值;当根据所述第二key值在所述第一存储区中未找到所述第二数据时,根据所述第二key值查找所述索引树以获得与所述第二key值对应的第二子树,其中,所述第二子树的根节点位于所述索引树的前n层;根据所述第二子树的第二叶子节点中包含的所述第二数据的信息从所述第二存储区中读取所述第二数据,其中,所述第二叶子节点为根据所述第二key值查找到的叶子节点。
可选地,所述处理器710具体用于:当所述第一存储区的剩余存储空间小于第一阈值且所述第一子树的读写次数满足所述第二阈值时,将所述第一数据从所述第一存储区写入所述第二存储区。
可选地,所述第一存储区包括非易失性存储介质。
应理解,在本申请实施例中,该处理器710可以是中央处理单元(CentralProcessing Unit,CPU),该处理器710还可以是其他通用处理器、数字信号处理器(DigitalSignal Processing,DSP)、专用集成电路(ASIC)、现成可编程门阵列(Field-ProgrammableGate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器730可以包括只读存储器和随机存取存储器,并向处理器710提供指令和数据。存储器730的一部分还可以包括非易失性随机存取存储器。
在实现过程中,上述方法的各步骤可以通过处理器710中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的定位方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器710中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器730,处理器710读取存储器730中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
根据本申请实施例的存储设备700可以对应于上述方法200中用于执行方法200的存储设备,以及根据本申请实施例的存储装置600,且该存储设备700中的各单元或模块分别用于执行上述方法200中存储设备所执行的各动作或处理过程,这里,为了避免赘述,省略其详细说明。
图8是本申请实施例的系统芯片的一个示意性结构图。图8的系统芯片800包括输入接口801、输出接口802、至少一个处理器803、存储器804,所述输入接口801、输出接口802、所述处理器803以及存储器804之间通过内部连接通路互相连接。所述处理器803用于执行所述存储器804中的代码。当所述代码被执行时,所述处理器803可以实现方法实施例中由存储设备执行的方法200。为了简洁,这里不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通新连接可以是通过一些接口,装置或单元的间接耦合或通新连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (12)
1.一种数据更新方法,所述方法由包含有第一存储区和第二存储区的存储设备执行,所述第一存储区的数据读写速度高于所述第二存储区的数据读写速度,所述方法包括:
根据第一数据的第一关键字key值查找索引树以获得与所述第一key值对应的第一子树,其中,所述第一数据存储于所述第一存储区中,所述索引树包括M层,所述索引树的前n层节点存储于所述第一存储区中,所述第一子树的根节点位于所述索引树的前n层,所述第一子树的叶子节点中包括第二存储区中已存储的数据的信息,M和n均为正整数,n小于或等于M;
将所述第一数据通过所述第一子树从所述第一存储区写入所述第二存储区;
根据所述第一key值更新所述第一子树,其中,更新后的所述第一子树的第一叶子节点中包含有所述第一数据的信息。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收写请求,所述写请求中包含有待写入的所述第一数据以及所述第一key值;
将所述第一数据以及所述第一key值写入所述第一存储区。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
接收读请求,所述读请求中包含有第二数据的第二key值;
当根据所述第二key值在所述第一存储区中未找到所述第二数据时,根据所述第二key值查找所述索引树以获得与所述第二key值对应的第二子树,其中,所述第二子树的根节点位于所述索引树的前n层;
根据所述第二子树的第二叶子节点中包含的所述第二数据的信息从所述第二存储区中读取所述第二数据,其中,所述第二叶子节点为根据所述第二key值查找到的叶子节点。
4.根据权利要求1所述的方法,其特征在于,所述将所述第一数据通过所述第一子树从所述第一存储区写入所述第二存储区包括:
当所述第一存储区的剩余存储空间小于第一阈值且所述第一子树的读写次数满足第二阈值时,将所述第一数据从所述第一存储区写入所述第二存储区。
5.根据权利要求1所述的方法,其特征在于,所述第一存储区包括非易失性存储介质。
6.一种存储装置,其特征在于,所述存储装置包括存储模块和处理模块,所述存储模块包括第一存储区和第二存储区,所述第一存储区的数据读写速度高于所述第二存储区的数据读写速度,所述处理模块用于:
根据第一数据的第一关键字key值查找索引树以获得与所述第一key值对应的第一子树,其中,所述第一数据存储于所述第一存储区中,所述索引树包括M层,所述索引树的前n层节点存储于所述第一存储区中,所述第一子树的根节点位于所述索引树的前n层,所述第一子树的叶子节点中包括第二存储区中已存储的数据的信息,M和n均为正整数,n小于或等于M;
将所述第一数据通过所述第一子树从所述第一存储区写入所述第二存储区;
根据所述第一key值更新所述第一子树,其中,更新后的所述第一子树的第一叶子节点中包含有所述第一数据的信息。
7.根据权利要求6所述的存储装置,其特征在于,所述处理模块还用于:
接收写请求,所述写请求中包含有待写入的所述第一数据以及所述第一key值;
将所述第一数据以及所述第一key值写入所述第一存储区。
8.根据权利要求6或7所述的存储装置,其特征在于,所述处理模块还用于:
接收读请求,所述读请求中包含有第二数据的第二key值;
当根据所述第二key值在所述第一存储区中未找到所述第二数据时,根据所述第二key值查找所述索引树以获得与所述第二key值对应的第二子树,其中,所述第二子树的根节点位于所述索引树的前n层;
根据所述第二子树的第二叶子节点中包含的所述第二数据的信息从所述第二存储区中读取所述第二数据,其中,所述第二叶子节点为根据所述第二key值查找到的叶子节点。
9.根据权利要求6所述的存储装置,其特征在于,所述处理模块具体用于:
当所述第一存储区的剩余存储空间小于第一阈值且所述第一子树的读写次数满足第二阈值时,将所述第一数据从所述第一存储区写入所述第二存储区。
10.根据权利要求6所述的存储装置,其特征在于,所述第一存储区包括非易失性存储介质。
11.一种计算机,其特征在于,包括:处理器和存储器;
所述存储器用于存储计算机执行指令,所述处理器和所述存储器之间通过内部连接通路互相通信,当所述计算机运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述计算机执行权利要求1-5中任意一项所述的方法。
12.一种计算机可读存储介质,其特征在于,包括计算机执行指令,当计算机的处理器执行所述计算机执行指令时,所述计算机执行权利要求1-5中任意一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2017/083657 WO2018205151A1 (zh) | 2017-05-09 | 2017-05-09 | 数据更新方法和存储装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110168532A CN110168532A (zh) | 2019-08-23 |
CN110168532B true CN110168532B (zh) | 2021-08-20 |
Family
ID=64104067
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780070813.XA Active CN110168532B (zh) | 2017-05-09 | 2017-05-09 | 数据更新方法和存储装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110168532B (zh) |
WO (1) | WO2018205151A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104403B (zh) * | 2019-11-30 | 2022-06-07 | 北京浪潮数据技术有限公司 | 一种lsm树数据处理方法、系统、设备及计算机介质 |
CN111131015B (zh) * | 2019-12-27 | 2021-09-03 | 芯启源(南京)半导体科技有限公司 | 一种基于PC-Trie动态更新路由的方法 |
CN111475507B (zh) * | 2020-03-31 | 2022-06-21 | 浙江大学 | 一种工作负载自适应单层lsmt的键值数据索引方法 |
CN111857582B (zh) * | 2020-07-08 | 2024-04-05 | 平凯星辰(北京)科技有限公司 | 一种键值存储系统 |
CN114626532B (zh) * | 2020-12-10 | 2023-11-03 | 本源量子计算科技(合肥)股份有限公司 | 基于地址读取数据的方法、装置、存储介质及电子装置 |
CN113609076A (zh) * | 2021-08-04 | 2021-11-05 | 杭州海康威视数字技术股份有限公司 | 一种文件存储方法和文件读取方法 |
CN115086168B (zh) * | 2022-08-19 | 2022-11-22 | 北京全路通信信号研究设计院集团有限公司 | 一种车载设备通信参数更新存储方法、系统 |
CN115374127B (zh) * | 2022-10-21 | 2023-04-28 | 北京奥星贝斯科技有限公司 | 数据存储方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751406A (zh) * | 2008-12-18 | 2010-06-23 | 赵伟 | 一种实现基于列存储的关系型数据库的方法及装置 |
CN102591864A (zh) * | 2011-01-06 | 2012-07-18 | 上海银晨智能识别科技有限公司 | 比对系统中的数据更新方法及装置 |
CN104090942A (zh) * | 2014-06-30 | 2014-10-08 | 中国电子科技集团公司第三十二研究所 | 应用于网络处理器中的Trie搜索方法及装置 |
CN105447059A (zh) * | 2014-09-29 | 2016-03-30 | 华为技术有限公司 | 一种数据处理方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030093613A1 (en) * | 2000-01-14 | 2003-05-15 | David Sherman | Compressed ternary mask system and method |
CN104899297B (zh) * | 2015-06-08 | 2019-02-26 | 南京航空航天大学 | 创建具有存储感知的混合索引的方法 |
-
2017
- 2017-05-09 CN CN201780070813.XA patent/CN110168532B/zh active Active
- 2017-05-09 WO PCT/CN2017/083657 patent/WO2018205151A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101751406A (zh) * | 2008-12-18 | 2010-06-23 | 赵伟 | 一种实现基于列存储的关系型数据库的方法及装置 |
CN102591864A (zh) * | 2011-01-06 | 2012-07-18 | 上海银晨智能识别科技有限公司 | 比对系统中的数据更新方法及装置 |
CN104090942A (zh) * | 2014-06-30 | 2014-10-08 | 中国电子科技集团公司第三十二研究所 | 应用于网络处理器中的Trie搜索方法及装置 |
CN105447059A (zh) * | 2014-09-29 | 2016-03-30 | 华为技术有限公司 | 一种数据处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110168532A (zh) | 2019-08-23 |
WO2018205151A1 (zh) | 2018-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110168532B (zh) | 数据更新方法和存储装置 | |
US10162598B2 (en) | Flash optimized columnar data layout and data access algorithms for big data query engines | |
US10642515B2 (en) | Data storage method, electronic device, and computer non-volatile storage medium | |
US10331641B2 (en) | Hash database configuration method and apparatus | |
CN107423422B (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
US11762828B2 (en) | Cuckoo filters and cuckoo hash tables with biasing, compression, and decoupled logical sparsity | |
CN108369587B (zh) | 创建用于交换的表 | |
Ahn et al. | ForestDB: A fast key-value storage system for variable-length string keys | |
US20150293958A1 (en) | Scalable data structures | |
CN105320775A (zh) | 数据的存取方法和装置 | |
CN102929793A (zh) | 包括键-值存储的存储器系统 | |
CN103229164B (zh) | 数据访问方法和装置 | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
CN113535670B (zh) | 一种虚拟化资源镜像存储系统及其实现方法 | |
CN108304142B (zh) | 一种数据管理方法和装置 | |
KR101806394B1 (ko) | 모바일 dbms환경에서 트랜잭션에 특화된 색인 캐시의 구조를 갖는 데이터 처리 방법 | |
CN113297432B (zh) | 用于分区拆分与合并的方法、处理器可读介质和系统 | |
CN110515897B (zh) | Lsm存储系统读性能的优化方法及系统 | |
JP6006740B2 (ja) | インデックス管理装置 | |
CN113779286B (zh) | 管理图数据的方法及装置 | |
KR102354343B1 (ko) | 블록체인 기반의 지리공간 데이터를 위한 공간 데이터 인덱싱 방법 및 장치 | |
Petrov | Algorithms behind modern storage systems | |
KR100878142B1 (ko) | 플래시 메모리 상에서의 효율적인 동작을 위한 수정된b-트리 인덱스 구성 방법 | |
US9824105B2 (en) | Adaptive probabilistic indexing with skip lists | |
CN114297196A (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 |