一种多索引的数据处理方法及装置的制造方法

文档序号:9667357阅读:224来源:国知局
一种多索引的数据处理方法及装置的制造方法
【技术领域】
[0001]本发明涉及缓存技术领域,尤其涉及一种多索引的数据处理方法及装置。
【背景技术】
[0002]内存缓存技术常用于提升客户端查询数据的性能、降低查询响应时间,在访问量较大的网站系统、数据量较大的数据库系统中常有应用。
[0003]数据系统等常带有自己内部的缓存机制,同时也有一些专门的内存缓存软件,它们各自有适合的应用场景,但是这些软件本身是面向通用的内存缓存需求,一般无法支持将内存、固态硬盘等作为统一内存地址空间进行管理。同时由于现有的缓存机制满足通用需求,系统相对比较复杂,在自定义的多索引随机访问场景下,不容易简单的实现缓存的空间申请、删除统一管理的需求,当反复申请和删除空间后会产生很多内存碎片,碎片整理一般耗时较多,并常伴有对系统访问的暂停动作,这对于高性能的实时在线系统的性能有重大影响。

【发明内容】

[0004]有鉴于此,本发明实施例提供一种多索引的数据处理方法及装置,以解决现有技术中的多索引的数据管理不当的技术问题。
[0005]第一方面,本发明实施例提供了一种多索引的数据处理方法,包括:
[0006]提取待存储数据的各索引值;
[0007]依据各索引值在指针数组中的各关联位置,建立关联的各索引链表节点;
[0008]确定待存储数据的关联存储桶区域,并在关联存储桶区域的表头中创建所述待存储数据与所述关联存储桶区域包含的各关联存储块间的映射关系;
[0009]依据创建的待存储数据与各关联存储块间的映射关系,存储所述待存储数据,并将所述待存储数据的唯一标识分配给各索引链表节点。
[0010]第二方面,本发明实施例还提供了一种多索引的数据处理装置,包括:
[0011]索引值提取模块,用于提取待存储数据的各索引值;
[0012]节点建立模块,用于依据各索引值在指针数组中的各关联位置,建立关联的各索引链表节点;
[0013]桶区域确定模块,用于确定待存储数据的关联存储桶区域,并在关联存储桶区域的表头中创建所述待存储数据与所述关联存储桶区域包含的各关联存储块间的映射关系;
[0014]数据存储模块,用于依据创建的待存储数据与各关联存储块间的映射关系,存储所述待存储数据,并将所述待存储数据的唯一标识分配给各索引链表节点。
[0015]本发明实施例提供的一种多索引的数据处理方法及装置。通过存储数据计算各索引值,在指针数组中找到各索引值的关联位置并建立关联的各索引链表节点,确定待存储数据的关联存储桶区域并在所述桶区域的表头中创建待存储数据与存储块的映射关系,根据映射关系存储待存储数据,并将待存储数据的唯一标识分配给各索引链表节点。采用上述方案,可以快速建立索引,并通过可控制的空间损失,提升空间分配、回收和整理的速度,达到以空间换时间的效果。根据待存储数据的容量大小合理分配存储区域,并计算数据的最佳分块数量,保证了存储区域的损失的可控。
【附图说明】
[0016]通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
[0017]图1为本发明实施例一提供的一种多索引的数据处理方法的流程图;
[0018]图2位本发明实施例一提供的多索引建立区域图;
[0019]图3为本发明实施例二提供的一种多索引的数据处理方法的流程图;
[0020]图4为本发明实施例三提供的一种多索引的数据处理方法的流程图;
[0021]图5为本发明实施例四提供的一种多索引的数据处理方法的流程图;
[0022]图6为本发明实施例四提供的存储块移动不意图;
[0023]图7为本发明实施例五提供的一种多索引的数据处理方法的流程图;
[0024]图8为本发明实施例五提供的待存储数据存储示意图;
[0025]图9为本发明实施例六提供的一种多索引的数据处理装置的示意图。
【具体实施方式】
[0026]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
[0027]实施例一
[0028]图1为本发明实施例一提供的一种多索引的数据处理方法的流程图。本实施例的方法具体用于终端快速建立待存储数据的多索引的情况。本实施例的方法可由多索引的数据处理装置执行,该装置可由软件和/或硬件来实现,集成在可建立多索引的终端中。如图1所示,该方法包括:
[0029]S110、提取待存储数据的各索引值。
[0030]示例性的,根据预先配置的索引构建规则,提取待存储数据构建各个索引值。其中索引构建规则可以根据实际情况设定,这里不作具体限定。
[0031]S120、依据各索引值在指针数组中的各关联位置,建立关联的各索引链表节点。
[0032]示例性的,对各索引值进行哈希计算,可以是采用高性能的哈希函数对各索引值进行哈希计算,高性能哈希函数可以是BKDRHash函数。将计算后得到的整数与指针数组的长度进行取模计算,其中指针数组用于存储单链表表头指针,指针数组的长度大于等于终端可存储的索引值的个数。根据取模计算得到的值找到对应的指针数组,判断该指针数组指示的对应位置是否为空。若为空,则在指针数组中建立新的单链表表头指针。根据索引值创建单链表表头指针之后,建立新的索引链表节点,其中指针数组中各单链表表头指针指向的各索引链表节点构成单链表,指针数组与单链表构成索引区。索引链表节点分为三部分,第一部分用于存储索引值,即第一部分为指针数组指向的区域。第二部分暂时为空,用于在确定存储数据的存储桶区域后,存储存储桶区域中表头的信息。第三部分设置为空,若发生哈希冲突后,处理哈希冲突。若指针数组指示的对应位置不为空,说明其他的索引值占用此指针数组,即发生了哈希冲突,此时,采用开地址法处理冲突,即从被占用的指针数组开始遍历到单链表的末端,在末索引链表节点后创建一个新的索引链表节点,将末索引链表节点的第三部分指向新的索引链表节点的第一部分,即处理冲突。
[0033]S130、确定待存储数据的关联存储桶区域,并在关联存储桶区域的表头中创建所述待存储数据与所述关联存储桶区域包含的各关联存储块间的映射关系。
[0034]示例性的,实际存储数据的数据区基本单位是存储块,相同内存容量的存储块逻辑上形成了存储桶区域,例如4K容量的存储块组成了 4K桶区域,8K容量的存储块组成了8K桶区域。每个存储桶区域中包含至少一个存储桶,存储桶为实际的桶。每个存储桶的存储大小为存储块大小的整数倍,同一存储桶区域中的存储桶逻辑上连续,也可以物理上连续。每个存储桶区域中包含唯一一个表头,所述表头分为两部分,一部分用来存储桶区域和存储桶之间的映射关系,存储桶和存储块之间的映射关系,以及存储桶的地址、存储块的地址和存储块的状态标识,另一部分用来存储待存储数据与存储块间的映射关系,映射关系优选包括待存储数据的唯一标识及对应的存储块地址。当有存储数据存入存储块时,在对应的表头中存入待存储数据的唯一标识及对应的存储块地址,并将相应存储块的状态标识变为存储标识。待存储数据的唯一标识的计算方法可以根据实际情况进行设定,这里不做限定。
[0035]进一步的,确定所述待存储数据的关联存储桶区域。
[0036]确定关联存储桶区域之前,优选为对待存储数据进行计算。首先对待存储数据使用设定的压缩编码器进行压缩,压缩方式可以采用LZ4压缩方式。压缩后对待存储数据进行计算,计算方式可以是待存储数据的大小除以设定的最佳块数,取得计算结果后,对计算结果上取整,取得最接近的存储块,将存储块对应的存储桶区域作为待存储数据的关联存储桶区域。其中,最佳块数根据实际情况进行设定。优选的,先判断所述存储桶区域是否存在,若存在,则直接作为关联存储桶区域,若存储桶区域不存在,则在存储空间中建立对应的桶区域,所述存储桶区域包含一个表头。例如,设定的最佳块数为10块,待存储数据大小为38K,则对待存储数据除以最佳块数后进行上取整得到4K,即4K存储块作为最接近的存储块,则可以确定4K存储块对应的4K存储桶区域作为关联存储桶区域。判断4K桶区域是否存在,若存在,则将4K桶区域作为关联存储桶区域,若不存在,则在存储空间中建立一个4K桶区域作为关联存储桶区域。
[0037]进一步的,将所述待存储数据按照关联存储通区域中存储块的大小拆分成各子待存储数据。
[0038]在确定关联存储桶区域后,对待存储数据进行拆分成各子待存储数据。具体拆分方式为待存储数据大小除以最接近存储块大小取整得到实际拆分的块数。确定实际拆分的块数后,对待存储数据进行拆分,若拆分后,末尾子待存储数据的大小小于所述存储块的大小,则在所述末尾子待存储数据中填充至少一个补齐码,使所述末尾子待数据大小与所述存储块大小相等。其中补齐码的大小为1字节,可以优选为0码。拆分后的单子待存储数据的大小与与所述关联桶区域中包含的单存储块的大小相等。例如,待存储数据大小为38K,确定其关联
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1