一种多索引的数据处理方法及装置
技术领域
本发明涉及缓存技术领域,尤其涉及一种多索引的数据处理方法及装置。
背景技术
内存缓存技术常用于提升客户端查询数据的性能、降低查询响应时间,在访问量较大的网站***、数据量较大的数据库***中常有应用。
数据***等常带有自己内部的缓存机制,同时也有一些专门的内存缓存软件,它们各自有适合的应用场景,但是这些软件本身是面向通用的内存缓存需求,一般无法支持将内存、固态硬盘等作为统一内存地址空间进行管理。同时由于现有的缓存机制满足通用需求,***相对比较复杂,在自定义的多索引随机访问场景下,不容易简单的实现缓存的空间申请、删除统一管理的需求,当反复申请和删除空间后会产生很多内存碎片,碎片整理一般耗时较多,并常伴有对***访问的暂停动作,这对于高性能的实时在线***的性能有重大影响。
发明内容
有鉴于此,本发明实施例提供一种多索引的数据处理方法及装置,以解决现有技术中的多索引的数据管理不当的技术问题。
第一方面,本发明实施例提供了一种多索引的数据处理方法,包括:
提取待存储数据的各索引值;
依据各索引值在指针数组中的各关联位置,建立关联的各索引链表节点;
确定待存储数据的关联存储桶区域,并在关联存储桶区域的表头中创建所述待存储数据与所述关联存储桶区域包含的各关联存储块间的映射关系;
依据创建的待存储数据与各关联存储块间的映射关系,存储所述待存储数据,并将所述待存储数据的唯一标识分配给各索引链表节点。
第二方面,本发明实施例还提供了一种多索引的数据处理装置,包括:
索引值提取模块,用于提取待存储数据的各索引值;
节点建立模块,用于依据各索引值在指针数组中的各关联位置,建立关联的各索引链表节点;
桶区域确定模块,用于确定待存储数据的关联存储桶区域,并在关联存储桶区域的表头中创建所述待存储数据与所述关联存储桶区域包含的各关联存储块间的映射关系;
数据存储模块,用于依据创建的待存储数据与各关联存储块间的映射关系,存储所述待存储数据,并将所述待存储数据的唯一标识分配给各索引链表节点。
本发明实施例提供的一种多索引的数据处理方法及装置。通过存储数据计算各索引值,在指针数组中找到各索引值的关联位置并建立关联的各索引链表节点,确定待存储数据的关联存储桶区域并在所述桶区域的表头中创建待存储数据与存储块的映射关系,根据映射关系存储待存储数据,并将待存储数据的唯一标识分配给各索引链表节点。采用上述方案,可以快速建立索引,并通过可控制的空间损失,提升空间分配、回收和整理的速度,达到以空间换时间的效果。根据待存储数据的容量大小合理分配存储区域,并计算数据的最佳分块数量,保证了存储区域的损失的可控。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明实施例一提供的一种多索引的数据处理方法的流程图;
图2位本发明实施例一提供的多索引建立区域图;
图3为本发明实施例二提供的一种多索引的数据处理方法的流程图;
图4为本发明实施例三提供的一种多索引的数据处理方法的流程图;
图5为本发明实施例四提供的一种多索引的数据处理方法的流程图;
图6为本发明实施例四提供的存储块移动示意图;
图7为本发明实施例五提供的一种多索引的数据处理方法的流程图;
图8为本发明实施例五提供的待存储数据存储示意图;
图9为本发明实施例六提供的一种多索引的数据处理装置的示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
实施例一
图1为本发明实施例一提供的一种多索引的数据处理方法的流程图。本实施例的方法具体用于终端快速建立待存储数据的多索引的情况。本实施例的方法可由多索引的数据处理装置执行,该装置可由软件和/或硬件来实现,集成在可建立多索引的终端中。如图1所示,该方法包括:
S110、提取待存储数据的各索引值。
示例性的,根据预先配置的索引构建规则,提取待存储数据构建各个索引值。其中索引构建规则可以根据实际情况设定,这里不作具体限定。
S120、依据各索引值在指针数组中的各关联位置,建立关联的各索引链表节点。
示例性的,对各索引值进行哈希计算,可以是采用高性能的哈希函数对各索引值进行哈希计算,高性能哈希函数可以是BKDRHash函数。将计算后得到的整数与指针数组的长度进行取模计算,其中指针数组用于存储单链表表头指针,指针数组的长度大于等于终端可存储的索引值的个数。根据取模计算得到的值找到对应的指针数组,判断该指针数组指示的对应位置是否为空。若为空,则在指针数组中建立新的单链表表头指针。根据索引值创建单链表表头指针之后,建立新的索引链表节点,其中指针数组中各单链表表头指针指向的各索引链表节点构成单链表,指针数组与单链表构成索引区。索引链表节点分为三部分,第一部分用于存储索引值,即第一部分为指针数组指向的区域。第二部分暂时为空,用于在确定存储数据的存储桶区域后,存储存储桶区域中表头的信息。第三部分设置为空,若发生哈希冲突后,处理哈希冲突。若指针数组指示的对应位置不为空,说明其他的索引值占用此指针数组,即发生了哈希冲突,此时,采用开地址法处理冲突,即从被占用的指针数组开始遍历到单链表的末端,在末索引链表节点后创建一个新的索引链表节点,将末索引链表节点的第三部分指向新的索引链表节点的第一部分,即处理冲突。
S130、确定待存储数据的关联存储桶区域,并在关联存储桶区域的表头中创建所述待存储数据与所述关联存储桶区域包含的各关联存储块间的映射关系。
示例性的,实际存储数据的数据区基本单位是存储块,相同内存容量的存储块逻辑上形成了存储桶区域,例如4K容量的存储块组成了4K桶区域,8K容量的存储块组成了8K桶区域。每个存储桶区域中包含至少一个存储桶,存储桶为实际的桶。每个存储桶的存储大小为存储块大小的整数倍,同一存储桶区域中的存储桶逻辑上连续,也可以物理上连续。每个存储桶区域中包含唯一一个表头,所述表头分为两部分,一部分用来存储桶区域和存储桶之间的映射关系,存储桶和存储块之间的映射关系,以及存储桶的地址、存储块的地址和存储块的状态标识,另一部分用来存储待存储数据与存储块间的映射关系,映射关系优选包括待存储数据的唯一标识及对应的存储块地址。当有存储数据存入存储块时,在对应的表头中存入待存储数据的唯一标识及对应的存储块地址,并将相应存储块的状态标识变为存储标识。待存储数据的唯一标识的计算方法可以根据实际情况进行设定,这里不做限定。
进一步的,确定所述待存储数据的关联存储桶区域。
确定关联存储桶区域之前,优选为对待存储数据进行计算。首先对待存储数据使用设定的压缩编码器进行压缩,压缩方式可以采用LZ4压缩方式。压缩后对待存储数据进行计算,计算方式可以是待存储数据的大小除以设定的最佳块数,取得计算结果后,对计算结果上取整,取得最接近的存储块,将存储块对应的存储桶区域作为待存储数据的关联存储桶区域。其中,最佳块数根据实际情况进行设定。优选的,先判断所述存储桶区域是否存在,若存在,则直接作为关联存储桶区域,若存储桶区域不存在,则在存储空间中建立对应的桶区域,所述存储桶区域包含一个表头。例如,设定的最佳块数为10块,待存储数据大小为38K,则对待存储数据除以最佳块数后进行上取整得到4K,即4K存储块作为最接近的存储块,则可以确定4K存储块对应的4K存储桶区域作为关联存储桶区域。判断4K桶区域是否存在,若存在,则将4K桶区域作为关联存储桶区域,若不存在,则在存储空间中建立一个4K桶区域作为关联存储桶区域。
进一步的,将所述待存储数据按照关联存储通区域中存储块的大小拆分成各子待存储数据。
在确定关联存储桶区域后,对待存储数据进行拆分成各子待存储数据。具体拆分方式为待存储数据大小除以最接近存储块大小取整得到实际拆分的块数。确定实际拆分的块数后,对待存储数据进行拆分,若拆分后,末尾子待存储数据的大小小于所述存储块的大小,则在所述末尾子待存储数据中填充至少一个补齐码,使所述末尾子待数据大小与所述存储块大小相等。其中补齐码的大小为1字节,可以优选为0码。拆分后的单子待存储数据的大小与与所述关联桶区域中包含的单存储块的大小相等。例如,待存储数据大小为38K,确定其关联存储桶区域为4K桶区域。则38除以4得到9.5,进行取整得到10。即待存储数据被分为10块子待存储数据,每块子待存储数据的大小为4K。拆分后最后一块子待存储数据的实际大小为2K,则用补齐码0将最后一块子待存储数据的大小补齐至4K。
进一步的,将各子待存储数据顺序放置入关联存储桶区域中包含的空存储块。
对待存储数据拆分后,将各子待存储数据顺序的放置入关联存储桶区域中的空存储块中。优选的,存储之前先确定所述关联存储桶区域中包含的空存储块的数量是否大于所述子待存储数据的数量。若是,顺序将各子待存储数据放置入关联存储桶区域中的空存储块中;若否,则在所述关联存储桶区域的空存储空间大于待存储数据所需存储空间时,在所述关联存储桶区域中创建新的存储桶,并顺序将各子待存储数据放置入关联存储桶区域中的空存储块中。其中,若存储桶区域中的存储空间小于所述待存储数据所需要的空间时,则表明程序异常,并回滚本次操作。例如,需要10块4K存储块的存储数据,在确定存储数据对应的桶空间为4K桶空间时,判断所述桶空间是否有大于或等于10块的空存储块,若有,则将子存储数据顺序存入空存储快中;若小于10块,则判断4K桶空间中是否有足够的剩余空间存储待存储数据,若有,则建立新的空桶,桶中至少有10块空存储块,将各子待存储数据顺序写入空存储块中,若4K桶空间中没有足够的剩余空间存储待存储数据,则表明程序异常,回滚本次操作。
S140、依据创建的待存储数据与各关联存储块间的映射关系,存储所述待存储数据,并将所述待存储数据的唯一标识分配给各索引链表节点。
示例性的,确定各子待存储数据关联存储桶区域,将各子待存储数据顺序存储至关联存储桶区域中的空存储块中。在关联存储桶区域的表头存储待存储数据与各关联存储块间的映射关系,映射关系优选包括所述待存储数据的唯一标识及对应的存储块地址,并将各关联存储块的状态标识改为存储标识。之后可以将表头中存储的映射关系反馈给相应的索引链表节点,也可以将链表中存储的待存储数据的唯一标识分配给各索引链表节点,优选为将待存储数据的唯一标识分配给各索引链表节点。关联桶区域的表头反馈的唯一标识存储在索引链表节点的第二部分。待存储数据对应的各索引链表节点获取的唯一标识相同,即不同的索引值对应相应的存储位置,这样可以节省存储空间。例如,待存储数据存入5块4K大小的存储块中,表头中存储块的状态标识为“0”和“1”,分别表示未存储标识和存储标识。5块存储块的地址分别为0010、0011、0100、0101和0110,计算得到存储块的唯一标识为01000100010001000,则在表头中存储0100010001000100000100011010001010110一段序列,并将表头中5块存储块的状态标识从“0”变为“1”。将待存储数据的唯一标识01000100010001000分配给各索引链表节点的第二部分。当通过用户输入某一索引值找到对应的索引链表节点后,根据01000100010001000找到相应的表头,并得到相应存储块的地址0010、0011、0100、0101和0110,通过查找存储块与存储桶之间的映射关系找到对应的存储桶进而找到所述存储块。
图2为本发明实施例一所提供的多索引建立区域图,如图2所示,从逻辑上将索引区域分为索引区10和数据区20。索引区10由指针数组101构成的散列表和指针数组101对应单链表102构成,单链表102同一指针数组101指向的各索引链表节点103构成。指针数据101的长度大于预计存储的索引值个数。索引链表节点103包括第一部分1031,用于存储索引值;第二部分1032,用于存储索引数据的唯一标识;第三部分1033,用于处理哈希冲突。其中指针数组101指向单链表102的第一个索引链表节点103的第一部分1031,索引链表节点103的第二部分1032指向对应的表头202,索引链表节点103的第三部分1033在发生哈希冲突时,指向同一单链表102中新建索引链表节点103的第一部分1031。哈希冲突为指针数组101已指向索引链表节点103,则遍历该单链表102,并在末尾建立新索引链表节点103。数据区20的基本单位为存储块204,按照存储块204大小不同,将数据区20逻辑上分成各存储桶区域201,每个存储桶区域201中的存储块204大小相同。存储桶区域201分为若干个实际的存储桶203。每个存储桶203的容量大小为存储块204容量大小的整数倍。待存储数据就是顺序存入相应存储桶区域201的存储块204中。每个存储桶区域包含唯一一个表头202,表头202分为两个部分,第一部分用来存储桶区域201、存储桶203和存储块204的映射关系,存储桶203的地址,存储块204的地址,及存储块204的状态标识;第二部分用来存储待存储数据的唯一标识及对应存储的存储块204的地址。当待存储数据存入对应的空存储块204后,在表头202第二部分存入新的待存储数据的唯一标识及对应存储的存储块204的地址,并将唯一标识反馈给索引链表节点103并存入索引链表节点103的第二部分1032中,此时完成索引的建立。
本发明实施例一提供的一种多索引的数据处理方法,通过取得待存储数据的各索引值,创建关联的索引链表节点,对待存储数据进行计算确定关联的存储桶区域,将存储数据顺序写入关联桶区域的空存储块中,并将待存储数据的唯一标识分配给各索引链表节点。采用上述方法,可以快速的创建索引,并且由于对待存储数据的合理拆分,可以有效的避免存储空间的浪费,提高了存储空间的利用率。
实施例二
图3为本发明实施例二提供的一种多索引的数据处理方法的流程图。本实施例是在实施例一的基础上,添加了利用已创建的索引进行查询的步骤,由图2可知,该方法包括:
S210、在监测到数据查询事件时,获取客户端发送的待查询索引值。
示例性的,当客户需要根据某个索引值来查询存储数据时,输入相应的索引值,由客户端获取客户输入的待查询索引值。
S220、确定所述待查询索引值在指针数组中的关联位置所指向的索引链表节点。
示例性的,对客户输入的待查询索引值进行哈希计算并取模,得到结果后找到相应的指针数组,通过指针数组映射到相应的单链表节点的入口,即确定待查询索引值在指针数组中的关联位置所指向的索引链表节点,此部分的时间复杂度为O(1)。若指针数组对应指向的索引链表节点存放的索引值与待查询索引值不相符即发生冲突,则遍历单链表中所有索引链表节点,查询与待查询索引值相符的索引链表节点。单链表发生冲突的概率非常小,并且解决冲突的时间为一个很小的常量。
S230、确定指向的索引链表节点对应的存储桶区域的表头。
示例性的,根据索引链表节点中的第二部分里面存放的标识,确定需要查询的存储数据对应的存储桶区域的表头。
S240、依据对应的存储桶区域的表头,查询待查询索引值对应的存储块,将对应的存储块中的数据合并,作为待查询索引值对应的访问数据。
示例性的,依据对应的存储桶区域的表头中待存储数据的唯一标识确定存储块的地址,根据存储块与存储桶的映射关系,找到存储数据的全部存储块,将存储块中的数据取出合并成原始压缩的存储数据作为待查询索引值对应的访问数据返回给客户端。
本发明实施例二提供的一种多索引的数据处理方法,通过获取客户输入的索引值确定索引链表节点,通过索引链表节点存储的待存储数据的唯一标识,找到对应的桶区域表头,根据存储桶区域中的表头确定对应的存储块,将各存储块中的存储数据合并获得对应的待查询的访问数据。采用上述查询方法,可以快速准确的取得索引值对应的存储数据,提升客户体验。
实施例三
图4为本发明实施例三提供的一种多索引的数据处理方法的流程图。本实施例是在实施例一的基础上,添加了删除已建立好的索引的步骤,如图4所示,该方法包括:
S310、在监测到数据删除事件时,获取客户端发送的待删除数据。
示例性的,获取客户端发送的待删除数据,也可以是获取客户端发送的待删除索引值;确定待删除索引值在指针数组中的关联位置指向的索引链表节点;依据指向的索引链表节点对应的存储桶区域的表头,获取对应的存储块的数据进行合并,作为待删除数据。
S320、按照预设的索引规则,提取待删除数据的各待删除索引值。
示例性的,根据预先配置的索引构建规则,提取待删除数据构建各个索引值。其中索引构建规则可以根据实际情况设定,这里不作具体限定。
S330、确定所述各待删除索引值在指针数组中的关联位置所指向的各索引链表节点。
示例性的,对各待删除索引值进行计算后,确定各待删除索引值在指针数组中的关联位置指向的各索引链表节点。具体计算规则为对各待删除索引值进行哈希计算,将计算后得到的整数与指针数组的长度进行取模计算,根据计算结果找到对应的指针数组,确定指针数组指向的索引链表节点。若指针数组指向的索引链表节点的索引值与待删除索引值不相符,则遍历该指针数组对应的单链表节点,找到对应的索引链表节点。
S340、确定指向的各索引链表节点对应的存储桶区域的表头。
示例性的,由于各索引链表节点指向同一存储桶区域的表头,可以根据待删除数据的任一索引链表节点的第二部分确定指向的对应存储桶区域的表头。
S350、删除表头中待存储数据与关联存储块间的映射关系,并删除所述各索引链表节点。
示例性的,在根据索引链表节点找到对应的存储桶区域的表头后,将存储桶区域表头中待删除数据的唯一标识及存储的存储块地址删除,并将对应的存储块的存储标识删除,也可以是将存储块的存储标识改为未存储标识,并删除待删除数据全部的索引链表节点。存储块上的数据可以未被删除,若下次在存储块中存储其他待存储数据时,将其他待存储数据替换原有数据。也可以删除存储块上对应的存储数据。
进一步的,获取桶区域表头中标记的存储块对应的子存储数据最后访问时间,若最后访问时间距离当前时间的间隔大于预设间隔,则将对应存储块中的子存储数据合并成存储数据,并算出存储数据对应的全部索引值,进而确定各索引值对应的各索引链表节点,删除全部索引链表节点,并删除表头中存储数据的唯一标识及相应的存储块地址,并删除对应的存储块的存储标识,也可以是将存储块的存储标识改为未存储标识。预设时间间隔可以根据实际情况进行设定。
本发明实施例三提供的一种多索引的数据处理方法,通过获取待删除数据,提取对应的各待删除索引值,找到对应的各索引链表节点,确定指向的各索引链表节点对应的存储桶区域的表头,删除表头中存储数据的映射关系,并删除所述各索引链表节点,同时修改存储块的状态标识为未存储标识。采用上述方法,可以快速删除索引链表节点,提高了索引删除效率。
实施例四
图5为本发明实施例四提供的一种多索引的数据处理方法的流程图。本实施例是在实施例一的基础上,添加了对使用率低于预设的使用率阈值的存储桶锁定的步骤,如图5所示,该方法包括:
S410、在检测到任一存储桶的使用率低于预设的使用率阀值时,将该存储桶标记为锁定状态。
示例性的,对存储区域中的存储桶的使用率进行检测,当检测到任一存储桶的使用率低于预设的使用率阈值时,将该存储桶标记为锁定状态,锁定后的存储桶不可用于存储、查询或删除数据。对存储桶的使用率检测可以是按照设定的时间间隔自动进行检测,也可以是人工进行检测。图6为本发明实施例四提供的存储块移动示意图,如图6所示,低于预设使用率阈值的存储桶501标记为锁定状态。预设的使用率阈值可以根据实际情况进行设定。
S420、将该存储桶中包含的存储块转移到除该存储桶外的其他存储桶中。
示例性的,确定与该存储桶对应存储桶区域的其他存储桶,将该存储桶中包含的存储块转移到其他存储桶中,优选为移动到存储桶区域中逻辑上靠前的存储桶中。如图6所示,将存储桶501中的存储块5011、存储块5012和存储块5013依次移动到存储桶502中。若存储桶502中的存储块的数量小于存储桶501中需要移动的存储块的数量,则可以在移动到存储桶502后,将剩余的存储块移动到其他的存储桶中,并改变桶区域表头中对应的存储数据唯一标识后面的存储块地址,并改变存储块的状态标识,然后解除锁定状态,释放此存储桶的存储空间。
本发明实施例四提供的一种多索引的数据处理方法,若检测到存储桶的使用率低于使用率预设阈值时,将存储桶的状态标记为锁定,并将所述存储桶中的存储块移动到其他的存储桶中。采用该方法可以定时的整理存储碎片,合理的利用存储空间,提高存储空间的利用率。
实施例五
图7为本发明实施例五提供的一种多索引的数据处理方法的流程图。本实施例为建立索引的优选示例,如图7所示,该方法具体包括:
S610、开始。
如,在获取待存储数据(value)时,开始。
S620、根据索引规则,从待存储数据中提取各个索引值(key)。
S630、对每个索引值进行哈希,根据指针数组(P[n])长度取模,映射到对应位置。
示例性的,哈希函数为BKDRhash。P[n]的长度大于预计存储key的个数。
S640、判断对应位置是否已有值。
示例性的,判断指针数组指向的位置是否已经有索引值,若有则执行S660,若没有则执行S650。
S650、建立新的单链表表头指针,并跳转执行S670。
S660、根据开地址发处理冲突,继续执行S670。
示例性的,遍历对应单链表的全部索引链表节点,并在末尾处新建索引链表节点,并存储key。
S670、建立对应索引链表节点,跳转执行S6180。
示例性的,建立好单链表表头指针后,建立对应的索引链表节点,索引链表节点包含三部分。第一部分存储key,即单链表表头指针指向索引链表节点的第一部分。第二部分用于存储S6160中表头存储的待存储数据唯一标识。第三部分暂时为空,用于发生冲突时,指示下一索引链表节点。
S680、对待存储数据压缩,继续执行S690。
示例性的,默认的压缩方式为LZ4。
S690、根据设定的最佳拆分数计算待存储数据拆分后子待存储数据的合适大小和个数,继续执行S6100。
S6100、判断对应子待存储数据的桶区域是否存在。
示例性的,所述桶区域中存储块的大小与子待存储数据的大小相同。若存在,则执行S6110,若不存在,则执行S6120。
S6110、判断此桶区域的各个存储桶中是否有足够的空余存储块位。
示例性的,若有足够块位,则执行S6150,若没有足够块位,则执行S6130。
S6120、建立对应子待存储数据大小的对应桶区域,继续执行S6130。
示例性的,建立的桶区域中的存储块的大小与所述子待存储数据的大小相同。
S6130、判断桶区域是否有足够的存储空间。
示例性的,若有足够的空间则执行S6140,若没有足够空间则执行S6170。
S6140、在桶区域中建立空存储桶,继续执行S6150。
示例性的,所述存储桶包含的存储块的个数大于子待存储数据的个数。
S6150、从第一个空存储块开始顺序填入待存储数据,继续执行S6160。
示例性的,图8为本发明实施例五提供的待存储数据存储示意图,如图8所示,待存储数据701分为子待存储数据7011、子待存储数据7012、子待存储数据7013、子待存储数据7014和子待存储数据7015。其中如果待存储数据无法填满7015,则用0将7015剩余部分填满,即填充部分为7016。将各子待存储数据顺序分配到存储桶702的空白存储块中,分配后得到写入存储数据的存储桶703。
S6160、在表头中存储待存储数据的唯一标识及对应的存储块地址,并将存储块的状态标识改为存储标识,跳转执行S6180。
S6170、异常结束并回滚。
S6180、将存储数据在表头中待存储数据的唯一标识赋给索引链表节点,并继续执行S6190。
示例性的,S610-S670与S680-S6170同时进行,双线完成后,将表头中待存储数据的唯一标识赋给索引链表节点的第二部分。
S6190、分配完毕。
本发明实施例五提供的一种多索引的数据处理方法,建立索引链表节点的同时对待存储数据进行处理并写入桶区域中,可以加快建立索引的速度,提高了数据存储效率。
实施例六
图9为本发明实施例六提供的一种多索引的数据处理装置的示意图。如图9所示,该装置包括:索引值提取模块801、节点建立模块802、桶区域确定模块803和数据存储模块804。
其中,索引值提取模块801,用于提取待存储数据的各索引值;节点建立模块802,用于依据各索引值在指针数组中的各关联位置,建立关联的各索引链表节点;桶区域确定模块803,用于确定待存储数据的关联存储桶区域,并在关联存储桶区域的表头中创建所述待存储数据与所述关联存储桶区域包含的各关联存储块间的映射关系;数据存储模块804,用于依据创建的待存储数据与各关联存储块间的映射关系,存储所述待存储数据,并将所述待存储数据的唯一标识分配给各索引链表节点。
进一步的,桶区域确定模块803还包括:存储桶确定单元、拆分单元和存入单元。
其中,存储桶确定单元,用于确定所述待存储数据的关联存储桶区域;拆分单元,用于将所述待存储数据按照关联存储桶区域中存储块的大小拆分成各子待存储数据;存入单元,用于将各子待存储数据顺序放置入关联存储桶区域中包含的空存储块。
优选的,所述存入单元还包括:空块判断子单元和分配子单元。
其中,空块判断子单元,用于确定所述关联存储桶区域中包含的空存储块的数量是否大于所述子待存储数据的数量;分配子单元,用于若是,顺序将各子待存储数据分配到关联存储桶区域中的空存储块中;若否,则在所述关联存储桶区域的空存储空间大于待存储数据所需存储空间时,在所述关联存储桶区域中创建新的存储桶,并顺序将各子待存储数据分配到关联存储桶区域中的空存储块中。
在上述实施例基础上,所述装置还包括:查询索引值获取模块、查询节点确定模块、查询表头模块和访问数据模块。
其中,查询索引值获取模块,用于在监测到数据查询事件时,获取客户端发送的待查询索引值;查询节点确定模块,用于确定所述待查询索引值在指针数组中的关联位置所指向的索引链表节点;查询表头模块,用于确定指向的索引链表节点对应的存储桶区域的表头;访问数据模块,用于依据对应的存储桶区域的表头,查询待查询索引值对应的存储块,将对应的存储块中的数据合并,作为待查询索引值对应的访问数据。
进一步的,所述装置还包括:待删除数据获取模块、待删除索引值获取模块、待删除节点确定模块、表头确定模块和删除模块。
其中,待删除数据获取模块,用于在监测到数据删除事件时,获取客户端发送的待删除数据;待删除索引值获取模块,用于按照预设的索引规则,提取待删除数据的各待删除索引值;待删除节点确定模块,用于确定所述各待删除索引值在指针数组中的关联位置所指向的各索引链表节点;表头确定模块,确定指向的各索引链表节点对应的存储桶区域的表头;删除模块,用于删除表头中待删除数据与关联存储块间的映射关系,并删除所述各索引链表节点。
优选的,所述待删除数据获取模块还包括:索引值获取单元、节点确定单元和数据获取单元。
其中,索引值获取单元,用于在监测到数据删除事件时,获取客户端发送的待删除索引值;节点确定单元,用于确定待删除索引值在指针数组中的关联位置指向的索引链表节点;数据获取单元,用于依据指向的索引链表节点对应的存储桶区域的表头,获取对应的存储块的数据进行合并,作为待删除数据。
进一步的,所述装置还包括:锁定模块和移动模块。
其中,锁定模块,用于在检测到任一存储桶的使用率低于预设的使用率阀值时,将该存储桶标记为锁定状态;移动模块,用于将该存储桶中包含的存储块转移到除该存储桶外的其他存储桶中。
本发明实施例六提供的一种多索引的数据处理装置,通过取得待存储数据的索引值,创建关联的索引链表节点,对待存储数据进行计算确定关联的存储桶区域,将存储数据顺序写入关联桶区域的空存储块中,并将待存储数据的唯一标识分配给各索引链表节点。采用上述装置,可以快速的创建索引,并且由于对待存储数据的合理拆分,可以有效的避免存储空间的浪费,提高了存储空间的利用率。
本发明实施例所提供的多索引的数据处理装置用于执行本发明实施例提供的多索引的数据处理方法,具备相应的功能和有益效果。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。