发明内容
本发明的主要目的在于解决现有技术在筛选运算过程中与内存的资源占用过多的技术问题。
本发明第一方面提供了一种内存数据的筛选方法,包括步骤:
获取待筛选的内存数据;
解析所述内存数据的筛选分类,得到所述内存数据对应的筛选分类集,以及根据所述筛选分类集中筛选分类对应的筛选条件,通过预置哈希函数进行合并处理,生成哈希表;
读取所述内存数据对应的筛选条件,生成筛选条件集,以及根据所述哈希表,对所述筛选条件集进行关键字值分析处理,得到所述内存数据对应的筛选目标数据。
可选的,在本发明第一方面的第一种实现方式中,所述根据所述筛选分类集中筛选分类对应的筛选条件,通过预置哈希函数进行合并处理,生成哈希表包括:
根据预置筛选关系对应表,统计所述筛选分类集中筛选分类对应筛选条件的数量,得出筛选条件总数;
根据预置数据类型对应表,查询出所述筛选条件总数对应的数据类型;
根据预置哈希函数和所述数据类型对应的bit位,将所述筛选分类集中筛选分类对应的筛选条件进行组合处理,生成哈希表。
可选的,在本发明第一方面的第二种实现方式中,所述根据预置数据类型对应表,查询出所述筛选条件总数对应的数据类型包括:
判断所述筛选条件总数是否大于8;
若小于8,则将所述筛选条件总数对应的数据类型确定为Byte类型;
若大于8,则判断所述筛选条件总数是否大于64;
若小于64,则将所述筛选条件总数对应的数据类型确定为Int类型;
若大于64,则将所述筛选条件总数对应的数据类型确定为Byte类型。
可选的,在本发明第一方面的第三种实现方式中,所述根据预置哈希函数和所述数据类型对应的bit位,将所述筛选分类集中筛选分类对应的筛选条件进行组合处理,生成哈希表包括:
根据所述哈希函数,将所述筛选分类集中筛选分类对应筛选条件转换为关键字值,生成关键字值集;
将所述关键字值集中的关键字值填入之所述数据类型对应的bit位中,并设置映射属性为单一映射,生成哈希表。
可选的,在本发明第一方面的第四种实现方式中,所述读取所述内存数据对应的筛选条件,生成筛选条件集包括:
将所述内存数据的筛选类型确认为一级树状数组,以及将所有所述筛选类型对应的筛选条件确认为二级树状数组;
基于所述一级树状数组和所述二级树状数组,对所述内存数据的筛选条件进行结构组合处理,生成筛选条件集。
可选的,在本发明第一方面的第五种实现方式中,所述根据所述哈希表,对所述筛选条件集进行关键字值分析处理,得到所述内存数据对应的筛选目标数据包括:
将所述筛选条件集中的筛选条件转换为筛选关键字值,生成筛选关键字值集;
将所述筛选关键字值集中的筛选关键字值依次与所述哈希表中的关键字值进行匹配处理,得到匹配结果;
基于所述匹配结果,从预置存储数据库中抓取出所述匹配结果对应的存储数据;
将所述存储数据确定为所述内存数据对应的筛选目标数据。
可选的,在本发明第一方面的第六种实现方式中,所述将所述筛选关键字值集中的筛选关键字值依次与所述哈希表中的关键字值进行匹配处理,得到匹配结果包括:
抓取所述筛选关键字值集中筛选关键字值;
将所述筛选关键字值与所述哈希表中的关键字值进行比对,判断所述哈希表是否存在匹配的关键字值;
若不存在,则将筛选条件错误的数据发送至预置显示端口;
若存在,则将匹配关键字值在所述哈希表中的位置提取,得到匹配键位;
将所述筛选关键字值集中筛选关键字值对应的匹配键位合并,得到匹配结果。
本发明第二方面提供了一种内存数据的筛选装置,所述内存数据的筛选装置包括:
获取模块,用于获取待筛选的内存数据;
解析合并模块,用于解析所述内存数据的筛选分类,得到所述内存数据对应的筛选分类集,以及根据所述筛选分类集中筛选分类对应的筛选条件,通过预置哈希函数进行合并处理,生成哈希表;
分析模块,用于读取所述内存数据对应的筛选条件,生成筛选条件集,以及根据所述哈希表,对所述筛选条件集进行关键字值分析处理,得到所述内存数据对应的筛选目标数据。
本发明第三方面提供了一种内存数据的筛选设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;所述至少一个处理器调用所述存储器中的所述指令,以使得所述内存数据的筛选设备执行上述的内存数据的筛选方法。
本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的内存数据的筛选方法。
本发明实施例中,通过调整检索数据库时采用多个索引筛选的方式,将多个索引筛选条件组合成单一条件,通过组合后的单一条件进行数据筛选判断,解决了内存数据库需要采用多个索引的方式,占用内存几倍于哈希字典存储数据,且需要依赖数据库的技术问题。
具体实施方式
本发明实施例提供了一种内存数据的筛选方法、装置、设备及存储介质。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中内存数据的筛选方法的一个实施例包括:
101、获取待筛选的内存数据;
在本实施例中,数据的筛选需要将原始数据放入在内存数据进行计算,在内存运算上进行筛选过程。需要说明的是,本步骤获取的是仅仅将原始数据加载至内存数据中的数据,并未进行筛选处理。
102、解析内存数据的筛选分类,得到内存数据对应的筛选分类集,以及根据筛选分类集中筛选分类对应的筛选条件,通过预置哈希函数进行合并处理,生成哈希表;
在本实施例中,解析和处理内存数据,得到需要的多种数据信息。对需要用到的多个筛选分类进行条件细化处理。假设一共有5个筛选分类,每个筛选分类都有固定的若干种种类,假设第1个筛选分类的种类为N1种,假设第2个筛选分类的种类为N2种假设,第3个筛选分类的种类为N3种假设,第4个筛选分类的种类为N4种假设,第5个筛选分类的种类为N5种。所有筛选条件的线性分布一共是N1+N2+N3+N4+N5种,则总和为M,由此可以知道在筛选分类集中存在5种筛选分类,5种筛选分类存在M个筛选条件。将M种类型映射为二进制类型中的bit位。可以根据具体M为多少,来决定选择在内存中采用内存Hash字典存储数据时,采用何种类型的Key值。假设bit小于8,则Key值用Byte类型(8Bit)即可满足需求;上述示例中,当M大于8小于64时,假设M为27,则Key值采用Int型(32Bit)。当M大于64时,则可以采用固定长度的Byte数组作为Key值,只需满足Byte数组的长度乘以8大于M即可。基于采用的数据类型将筛选分类的每个种类填写至bit位,生成哈希表。
1021、根据预置筛选关系对应表,统计筛选分类集中筛选分类对应筛选条件的数量,得出筛选条件总数;
1022、根据预置数据类型对应表,查询出筛选条件总数对应的数据类型;
1023、根据预置哈希函数和数据类型对应的bit位,将筛选分类集中筛选分类对应的筛选条件进行组合处理,生成哈希表。
在1021-1023步骤中,所有线性分类的种类映射为单一索引。M种不同的线性分类,可以间接映射为M种不同条件的分类,将每种条件作为一个因子。则实际所有的筛选类型最多的组合为N1*N2*N3*N4*N5=K。假设N1=4,N2=8,N3=7,N4=4,N5=4,则K=3584。也就是说假设对5个筛选条件每个都进行精确的过滤,在假定的分类下,最多可能精细到3584种细分类型。由此将每个筛选分类计算出筛选条件总数为27。由此知道数据类型使用Int型,开启Int型数据类型生成bit位,将筛选分类集中的筛选条件一一填入至bit位中,完成哈希表格的建立。
进一步的,在1022步骤中,可以执行以下步骤:
10221、判断筛选条件总数是否大于8;
10222、若小于8,则将筛选条件总数对应的数据类型确定为Byte类型;
10223、若大于8,则判断筛选条件总数是否大于64;
10224、若小于64,则将筛选条件总数对应的数据类型确定为Int类型;
10225、若大于64,则将筛选条件总数对应的数据类型确定为Byte类型。
在10221-10225步骤中,通过分类条件判断整个筛选过程,先判断筛选是否大于8,将不大于8的,认定使用Byte类型的数据类型,将大于8的再次进行判断是否大于64,如果不大于64则可以认为数据类型使用Int类型,具体可以使用两个Int类型的数据保证整个bit位能完全覆盖。如果大于64则认定数据类型使用Byte类型,只需满足Byte数组的长度乘以8大于M即可。
进一步的,1023步骤可以执行:
10231、根据哈希函数,将筛选分类集中筛选分类对应筛选条件转换为关键字值,生成关键字值集;
10232、将关键字值集中的关键字值填入之数据类型对应的bit位中,并设置映射属性为单一映射,生成哈希表。
在10231、10232实施例中,哈希函数对筛选条件的字符串进行转换调整,使得筛选条件转变为关键字值,也即是key值,而将key值填入bit位上,并设置单一映射的value值,由此生成哈希表。
103、读取内存数据对应的筛选条件,生成筛选条件集,以及根据哈希表,对筛选条件集进行关键字值分析处理,得到内存数据对应的筛选目标数据。
在本实施例中,内存数据之前是分析筛选分类,通过设置筛选对应表格,将涉及到内存数据的筛选分类下的筛选条件转换为哈希表。此步骤是根据以及划定范围的哈希表对内存数据实际涉及的筛选条件进行比对,第一步先提取出筛选条件,5种筛选分类下分别对应的是第一种、第七种、第二种、第二种、第二种,将5种筛选分类的筛选条件的字符串提取出。将字符串转换为key值,基于转换的key值在哈希表中查询出Value值,实现在内存数据中查询出筛选目标数据的过程。需要说明的是,整个筛选过程是将5种筛选分类作为一个整体进行筛选,减少在内存中的中间数据,实现降低内存消耗的目标。
优选的,在103步骤中的“读取内存数据对应的筛选条件,生成筛选条件集”可以有以下方式实现。
1031、将内存数据的筛选类型确认为一级树状数组,以及将所有筛选类型对应的筛选条件确认为二级树状数组;
1032、基于一级树状数组和二级树状数组,对内存数据的筛选条件进行结构组合处理,生成筛选条件集。
在1031、1032步骤中,以筛选类型为第一层筛选组,而以筛选类型下的筛选条件作为二级筛选组,通过生成树状结构数据实现整个筛选依据的数据结构。树状结构的数据结构本身确定为筛选条件集,实际上包含两个数据集,一个是筛选类型一个是筛选条件,还存储了两个数据集中元素的对应关系。
1033、将筛选条件集中的筛选条件转换为筛选关键字值,生成筛选关键字值集;
1034、将筛选关键字值集中的筛选关键字值依次与哈希表中的关键字值进行匹配处理,得到匹配结果;
1035、基于匹配结果,从预置存储数据库中抓取出匹配结果对应的存储数据;
1036、将存储数据确定为内存数据对应的筛选目标数据。
在1033-1036步骤中,先基于设置的字符转换方式,将筛选条件集中的每个筛选条件的字符串转换为key值。举例key值存在5个{12,4,52,56,974},而将key值集与哈希表进行比对拉出哈希表中的Value值{D,F,ssoj,ks,Q},将数据库中{D,F,ssoj,ks,Q}每个元素对应的数据映射全部查询出,然后将查询的数据确定为筛选目标数据。
优选的,在1034匹配过程中,如果存在错误的筛选条件,则会增大计算机的运算过程,可以采用以下步骤避免错误数据的空算:
10341、抓取筛选关键字值集中筛选关键字值;
10342、将筛选关键字值与哈希表中的关键字值进行比对,判断哈希表是否存在匹配的关键字值;
10343、若不存在,则将筛选条件错误的数据发送至预置显示端口;
10344、若存在,则将匹配关键字值在哈希表中的位置提取,得到匹配键位;
10345、将筛选关键字值集中筛选关键字值对应的匹配键位合并,得到匹配结果。
在10341-10345步骤中,按顺序将{12,4,52,56,974}中的元素进行一一匹配,先抓取出12与哈希表中的关键字值进行比对,判断是否存在相同的关键字值,如果不存在则认为12是没有设置过的筛选条件,将“筛选条件输入错误”的信息发送至管理设备或者是显示端口中,并终止筛选过程。而如果12在哈希表中查询到了,则可以生成一个哈希表位置的矩阵,例如:
[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0],为标记匹配键位的矩阵。当{12,4,52,56,974}在哈希值中都存在相关的匹配关键字值,则会将所有的匹配键位进行合并生成[0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0]的键位矩阵,基于键位矩阵在数据库中抓取相关数据。
本发明实施例中,通过调整检索数据库时采用多个索引筛选的方式,将多个索引筛选条件组合成单一条件,通过组合后的单一条件进行数据筛选判断,解决了内存数据库需要采用多个索引的方式,占用内存几倍于哈希字典存储数据,且需要依赖数据库的技术问题。
上面对本发明实施例中内存数据的筛选方法进行了描述,下面对本发明实施例中内存数据的筛选装置进行描述,请参阅图2,本发明实施例中内存数据的筛选装置一个实施例包括:
获取模块201,用于获取待筛选的内存数据;
解析合并模块202,用于解析所述内存数据的筛选分类,得到所述内存数据对应的筛选分类集,以及根据所述筛选分类集中筛选分类对应的筛选条件,通过预置哈希函数进行合并处理,生成哈希表;
分析模块203,用于读取所述内存数据对应的筛选条件,生成筛选条件集,以及根据所述哈希表,对所述筛选条件集进行关键字值分析处理,得到所述内存数据对应的筛选目标数据。
本发明实施例中,通过调整检索数据库时采用多个索引筛选的方式,将多个索引筛选条件组合成单一条件,通过组合后的单一条件进行数据筛选判断,解决了内存数据库需要采用多个索引的方式,占用内存几倍于哈希字典存储数据,且需要依赖数据库的技术问题。
请参阅图3,本发明实施例中内存数据的筛选装置的另一个实施例包括:
获取模块201,用于获取待筛选的内存数据;
解析合并模块202,用于解析所述内存数据的筛选分类,得到所述内存数据对应的筛选分类集,以及根据所述筛选分类集中筛选分类对应的筛选条件,通过预置哈希函数进行合并处理,生成哈希表;
分析模块203,用于读取所述内存数据对应的筛选条件,生成筛选条件集,以及根据所述哈希表,对所述筛选条件集进行关键字值分析处理,得到所述内存数据对应的筛选目标数据。
其中,所述解析合并模块202包括:
统计单元2021,用于根据预置筛选关系对应表,统计所述筛选分类集中筛选分类对应筛选条件的数量,得出筛选条件总数;
查询单元2022,用于根据预置数据类型对应表,查询出所述筛选条件总数对应的数据类型;
组合单元2023,用于根据预置哈希函数和所述数据类型对应的bit位,将所述筛选分类集中筛选分类对应的筛选条件进行组合处理,生成哈希表。
其中,所述查询单元2022具体用于:
判断所述筛选条件总数是否大于8;
若小于8,则将所述筛选条件总数对应的数据类型确定为Byte类型;
若大于8,则判断所述筛选条件总数是否大于64;
若小于64,则将所述筛选条件总数对应的数据类型确定为Int类型;
若大于64,则将所述筛选条件总数对应的数据类型确定为Byte类型。
其中,所述组合单元2023具体用于:
根据所述哈希函数,将所述筛选分类集中筛选分类对应筛选条件转换为关键字值,生成关键字值集;
将所述关键字值集中的关键字值填入之所述数据类型对应的bit位中,并设置映射属性为单一映射,生成哈希表。
其中,所述分析模块203具体用于:
将所述内存数据的筛选类型确认为一级树状数组,以及将所有所述筛选类型对应的筛选条件确认为二级树状数组;
基于所述一级树状数组和所述二级树状数组,对所述内存数据的筛选条件进行结构组合处理,生成筛选条件集。
其中,所述分析模块203包括:
转换单元2031,用于将所述筛选条件集中的筛选条件转换为筛选关键字值,生成筛选关键字值集;
匹配单元2032,用于将所述筛选关键字值集中的筛选关键字值依次与所述哈希表中的关键字值进行匹配处理,得到匹配结果;
抓取单元2033,用于基于所述匹配结果,从预置存储数据库中抓取出所述匹配结果对应的存储数据;
确定单元2034,用于将所述存储数据确定为所述内存数据对应的筛选目标数据。
其中,所述匹配单元2032具体用于:
抓取所述筛选关键字值集中筛选关键字值;
将所述筛选关键字值与所述哈希表中的关键字值进行比对,判断所述哈希表是否存在匹配的关键字值;
若不存在,则将筛选条件错误的数据发送至预置显示端口;
若存在,则将匹配关键字值在所述哈希表中的位置提取,得到匹配键位;
将所述筛选关键字值集中筛选关键字值对应的匹配键位合并,得到匹配结果。
本发明实施例中,通过调整检索数据库时采用多个索引筛选的方式,将多个索引筛选条件组合成单一条件,通过组合后的单一条件进行数据筛选判断,解决了内存数据库需要采用多个索引的方式,占用内存几倍于哈希字典存储数据,且需要依赖数据库的技术问题。
上面图2和图3从模块化功能实体的角度对本发明实施例中的内存数据的筛选装置进行详细描述,下面从硬件处理的角度对本发明实施例中内存数据的筛选设备进行详细描述。
图4是本发明实施例提供的一种内存数据的筛选设备的结构示意图,该内存数据的筛选设备400可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)410(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序433或数据432的存储介质430(例如一个或一个以上海量存储设备)。其中,存储器420和存储介质430可以是短暂存储或持久存储。存储在存储介质430的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对内存数据的筛选设备400中的一系列指令操作。更进一步地,处理器410可以设置为与存储介质430通信,在内存数据的筛选设备400上执行存储介质430中的一系列指令操作。
基于内存数据的筛选设备400还可以包括一个或一个以上电源440,一个或一个以上有线或无线网络接口450,一个或一个以上输入输出接口460,和/或,一个或一个以上操作系统431,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图4示出的内存数据的筛选设备结构并不构成对基于内存数据的筛选设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述内存数据的筛选方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统或装置、单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。