CN109325032B - 一种索引数据存储及检索方法、装置及存储介质 - Google Patents
一种索引数据存储及检索方法、装置及存储介质 Download PDFInfo
- Publication number
- CN109325032B CN109325032B CN201811091065.6A CN201811091065A CN109325032B CN 109325032 B CN109325032 B CN 109325032B CN 201811091065 A CN201811091065 A CN 201811091065A CN 109325032 B CN109325032 B CN 109325032B
- Authority
- CN
- China
- Prior art keywords
- key
- sets
- heap
- retrieval
- ordered
- 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
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2264—Multidimensional index structures
Abstract
本发明提供了一种索引数据存储及检索方法、装置及存储介质,数据存储方法在数据(即键值对)存储时,不仅根据值元素的大小进行排序,还将排序的数据序列划分为多个段,每个段将键值排序,并将数据序列与键值排序对应存储,实现值元素和键值(也称为记录编号)都有序存储,即构建了全新的索引结构,并提出了适于该索引结构的多条件检索方法,其对于任意的区间查询,结果集都可以用一个或者多个集合的并集来表示,并且这些集合大部分有序的,最多边界两个集合是无序的,从而提高了在多个条件查询时进行与、或、非等运算的效率。
Description
技术领域
本发明涉及数据存储及检索技术领域,特别是一种索引数据存储及检索方法、装置及存储介质。
背景技术
数据库索引是为了加速对数据库表中数据的检索而创建的一种存储结构。它是表中某一列或者若干列值的集合和相应的指向表中物理标识这些值所在数据位置的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页面快速的找到符合要求的数据内容。
一般索引常见的使用存储结构有BTree(B/B+树)、Hash(哈希)、TrieTree(字典树)、bitMap(位图)、顺序表、跳跃表。
数据库一般除了支持单个检索条件的查询,也支持多个检索条件进行与或非逻辑组合查询,例如,一个电商订单表,检索昨天到现在交易金额超过一千元钱的数据,这就是一个复合查询,这就有两个检索条件,交易时间在昨天以后,并且交易额超过一千元。实现这个复合查询一般有这两种使用索引检索的方案:
方案一:
1使用“交易时间”字段索引查询交易时间在昨天以后的记录编号,记为集合S1。
2使用“交易额”字段索引查询交易额超过一千元钱的记录编号,记为集合S2。
3合并两个集合S1,S2,得到符合两个条件的记录编号集合,根据编号读出记录并放回结果。
方案二:
1判断两个检索条件,哪个可能结果集更小,就先用索引查询符合该条件的记录集合。比如预估交易时间在昨天以后的记录比交易额超过一千的记录更少,就使用“交易时间”字段索引查询交易时间在昨天以后的记录编号,记为集合S1。
2对S1集合的记录编号逐一获取记录内容读出交易额,判断是否符合超过一千元,如果不符合,则在S1集合中删除该记录编号。最后S1就是复合查询的记录编号集合。
超过两个条件的复合查询,上面两个方案可能同时使用,即先使用索引查询符合一个或者多个检索条件的记录编号集合,逐一对集合中的编号读取记录,根据记录字段的值检验是否符合其它检索条件。
现有技术的缺陷在于:
对于n个检索条件的复合检索,假设这n个检索条件的单独查询的记录编号结果集分别为S1、S2...Sn,集合大小分别为N1、N2...Nn,符合所有条件的最终记录编号结果集为S,大小为N。不妨设S1是最小的集合,Sn为最大集合,即
N1=min{Ni|1≤i≤n}
Nn=max{Ni|1≤i≤n}
两个方案时间复杂度分别为:
方案一
方案二:
T(n)=N1
方案二的时间复杂度比方案一更好,检索时间应该更快,但是一些数据库索引数据在内存,索引查询很快,逐一验证符合检索条件需要的数据在磁盘,比较慢,所以一般N1远小于Nn时,方案二更高效,N1和Nn相差不大时,方案一更高效。
虽然在大部分查询中,这两个方案已经取得了不错的效果,但是有个不足点,当S1集合很大,而合并后的最终结果集S却很小的情况下,这两个方案效果就不是很好了。就是各种检索条件结果集比较大,而这些条件的复合检索总结果集很小,这类查询,数据库往往支持的不好,查询起来比较耗时。
发明内容
本发明针对上述现有技术中的缺陷,提出了如下技术方案。
一种索引数据存储方法,该方法包括:
划分步骤,将记录编号和对应字段的值组成一个键值对,记一共有P个键值对,将所有的键值对根据值元素的大小进行排序,将排序后的P个键值对的所有键元素划分为K个集合,每个集合中包括L个键元素;
排序步骤,分别对划分好的K个键元素集合按键元素大小进行排序,得到K个对应的键元素有序序列集合;
存储步骤,将P个有序键值对以及对应的K个排序键元素集合分别对应存储;
其中,L为大于0的整数、K为大于0的整数。
更进一步地,当所有键值对的总数P不为K的整数倍时,最后一个集合的键值对的数量为P-(K-1)*L个,其中P为大于1的整数。
本发明还提出了一种数据检索方法,该方法包括:
接收步骤,接收输入的第一检索条件和第二检索条件;
检索步骤,根据第一检索条件和第二检索条件在数据库中进行检索分别获得检索结果对应的以键值排序的集合S1和S2;
检索结果获得步骤,对键值排序的集合S1和S2进行处理获得检索结果。
更进一步地,所述数据库中的数据使用上述任一项所述的索引数据存储方法进行存储。
更进一步地,所述对键值排序的集合S1和S2进行处理是与运算时,其操作为:取S1中最小的元素m1;在S2找到第一个大于等于m1的元素m2;如果m2和m1相等,把m2加入到集合S,S2继续往下查找一个替换m2;在S1往下找到第一个大于等于m2的元素m1;如果m1和m2相等,把m1加入到集合S,S1继续往下查找一个替换m1;重复S2中取m2,S1中取m1,直到m1或者m2获取不到元素为止,其中集合S为有序集合S1和S2的交集,根据S中的键值获得对应的检索结果。
更进一步地,所述对键值排序的集合S1和S2进行处理是取非运算时,其操作为:取S1中最小的元素m1;在S2找到第一个大于等于m1的元素m2;如果m2和m1不相等,把m1加入到集合S,如果m2和m1相等,S2继续往下查找一个替换m2;在S1往下找到所有大于m1小于m2的元素并加入到结果集S,并把m1替换成S1中第一个大于m2的元素。重复S2中取m2,S1中取m1,直到m1或者m2获取不到元素为止,其中集合S为有序集合S1对S2取非操作后的结果,根据S中的键值获得对应的检索结果。
更进一步地,所述对键值排序的集合S1和S2进行处理是或运算时,其操作为:通过建立一个极大堆进行或的运算。
更进一步地,检索步骤的具体操作为:根据第一检索条件查询S1的键值范围,按数据存储时排序的集合进行拆分该键值范围,得到多个有序集合和X个无序集合;对S1中的X个无序集合进行排序;对S1的所有子集建立一个极大堆,用每个子集合中最小元素的大小表示子集间的大小关系,最小的集合就在堆顶,S1取最小元素就是堆顶集合的首元素;查找第一个大于等于m1的元素,判断堆顶集合首元素是否小于m1,如果小于m1,堆顶集合通过有序集合二分查找排掉集合中小于m1的元素,使得堆顶集合首元素大于等于m1,然后重新调整堆,然后再次重复判断堆顶集合,直到堆顶集合首元素大于等于m1,此时堆顶首元素就是整个堆所有集合中第一个大于等于m1的元素;采用同样的方式得到S2,其中X为0、1或2。
本发明还提出了一种索引数据存储装置,该装置包括:
划分模块,用于将记录编号和对应字段的值组成一个键值对,记一共有P个键值对,将所有的键值对根据值元素的大小进行排序,将排序后的P个键值对的所有键元素划分为K个集合,每个集合中包括L个键元素;
排序模块,用于分别对划分好的K个键元素集合按键元素大小进行排序,得到K个对应的键元素有序序列集合;
存储模块,用于将P个有序键值对以及对应的K个排序键元素集合分别对应存储;其中,L为大于0的整数、K为大于0的整数。
更进一步地,当所有键值对的总数P不为K的整数倍时,最后一个集合的键值对的数量为P-(K-1)*L个,其中P为大于1的整数。
本发明还提出了一种数据检索装置,该装置包括:
接收模块,用于接收输入的第一检索条件和第二检索条件;
检索模块,用于根据第一检索条件和第二检索条件在数据库中进行检索分别获得检索结果对应的以键值排序的集合S1和S2;
检索结果获得模块,用于对键值排序的集合S1和S2进行处理获得检索结果。
更进一步地,所述数据库中的数据使用上述任一项所述的索引数据存储方法进行存储。
更进一步地,所述对键值排序的集合S1和S2进行处理是与运算时,其操作为:所述对键值排序的集合S1和S2进行处理是与运算时,其操作为:取S1中最小的元素m1;在S2找到第一个大于等于m1的元素m2;如果m2和m1相等,把m2加入到集合S,S2继续往下查找一个替换m2;在S1往下找到第一个大于等于m2的元素m1;如果m1和m2相等,把m1加入到集合S,S1继续往下查找一个替换m1;重复S2中取m2,S1中取m1,直到m1或者m2获取不到元素为止,其中集合S为有序集合S1和S2的交集,根据S中的键值获得对应的检索结果。
更进一步地,所述对键值排序的集合S1和S2进行处理是取非运算时,其操作为:取S1中最小的元素m1;在S2找到第一个大于等于m1的元素m2;如果m2和m1不相等,把m1加入到集合S,如果m2和m1相等,S2继续往下查找一个替换m2;在S1往下找到所有大于m1小于m2的元素并加入到结果集S,并把m1替换成S1中第一个大于m2的元素。重复S2中取m2,S1中取m1,直到m1或者m2获取不到元素为止,其中集合S为有序集合S1对S2取非操作后的结果,根据S中的键值获得对应的检索结果。
更进一步地,所述对键值排序的集合S1和S2进行处理是或运算时,其操作为:通过建立一个极大堆进行或的运算。
更进一步地,检索模块执行的具体操作为:根据第一检索条件查询S1的键值范围,按数据存储时排序的集合进行拆分该键值范围,得到多个有序集合和X个无序集合;对S1中的X个无序集合进行排序;对S1的所有子集建立一个极大堆,用每个子集合中最小元素的大小表示子集间的大小关系,最小的集合就在堆顶,S1取最小元素就是堆顶集合的首元素;查找第一个大于等于m1的元素,判断堆顶集合首元素是否小于m1,如果小于m1,堆顶集合通过有序集合二分查找排掉集合中小于m1的元素,使得堆顶集合首元素大于等于m1,然后重新调整堆,然后再次重复判断堆顶集合,直到堆顶集合首元素大于等于m1,此时堆顶首元素就是整个堆所有集合中第一个大于等于m1的元素;采用同样的方式得到S2,其中X为0、1或2。
本发明还提出了一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序代码,当所述计算机程序代码被计算机执行时执行上述之任一的方法。
本发明的技术效果为:本发明为了提高多个检索条件下的检索效率,在数据(即键值对)存储时,不仅根据值元素的大小进行排序,还将排序的数据序列划分为多个段,每个段将键值排序,并将数据序列与键值排序对应存储,实现值元素和键值(也称为记录编号)都有序存储,即构建了全新的索引结构,对于任意的区间查询,结果集都可以用一个或者多个集合的并集来表示,并且这些集合大部分有序的,最多边界两个集合是无序的,从而提高了在多个条件查询时进行与、或、非等运算的效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显。
图1是根据本发明的实施例的一种索引数据存储方法的流程图。
图2是根据本发明的实施例的一种数据检索方法的流程图。
图3是根据本发明的实施例的一种索引数据存储装置的结构图。
图4是根据本发明的实施例的一种数据检索装置的结构图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了本发明的一种索引数据存储方法,该方法包括:
划分步骤S101,将记录编号和对应字段的值组成一个键值对,记一共有P个键值对,将所有的键值对根据值元素的大小进行排序,将排序后的P个键值对的所有键元素划分为K个集合,每个集合中包括L个键元素(也称为键值,在本发明中,键值与键元素二者是相同的)。
排序步骤S102,分别对划分好的K个键元素集合按键元素大小进行排序,得到K个对应的键元素有序序列集合。
存储步骤S103,将P个有序键值对以及对应的K个排序键元素集合分别对应存储。
本发明中的参数,P、L和K显然的为大于0的整数,这是本领域技术人员所能显而易见的知晓的。
在一些实施例中,键值对的总数并不能恰好分成多个集合,即当所有键值对的总数P不为K的整数倍时,最后一个集合的键值对的数量为P-(K-1)*L个,其中P为大于1的整数。
该方法的一个具体的实施例为:为了实现值和记录编号都要有序,这里是用空间换取时间的方法,采用多级顺序表的形式,就是除了字段有序值对应的记录编号外,增加对记录编号排序的存储,并且可以按配置的级别进行分批多段存储。如下表,增加一列每五个连续记录编号进行排序的序列。
L=5表示每5个连续的记录集合进行排序,就是3个大小为5的有序集合组成了所有编号,三个有序集合分别是{5,7,8,10,11}、{2,3,4,6,14}和{1,9,12,13,15},即本实施例中P=15,K=3,L=5,这种数据存储方式即索引结构的建立方式是本发明的重要发明点之一,是后续本发明提出的检索方法的基础。
图2示出了一种数据检索方法,该方法包括:
接收步骤S201,接收输入的第一检索条件和第二检索条件;例如,第一检索条件i是交易时间在昨天以后记录,第二检索条件是交易额超过一千元记录。
检索步骤S202,根据第一检索条件和第二检索条件在数据库中进行检索分别获得检索结果对应的以键值排序的集合S1和S2。一个实施例是,S1是交易时间在昨天以后记录编号集合,S2是交易额超过一千元记录编号集合,S1、S2都是有序集。
检索结果获得步骤S203,对键值排序的集合S1和S2进行处理获得检索结果。
本发明中的所述数据库中的数据使用图1所示的方法进行存储。
与运算是多条件检索时常用的运算方式,当所述对键值排序的集合S1和S2进行处理是与运算时,其操作为:
1、取S1中最小的元素m1。时间复杂度1。
2、在S2找到第一个大于等于m1的元素m2;如果m2和m1相等,把m2加入到集合S,S2继续往下查找一个替换m2。有序集合可以二分查找,复杂度log2(Nt2),Nt2为该步骤前的S2集合大小。
3、在S1往下找到第一个大于等于m2的元素m1;如果m1和m2相等,把m1加入到集合S,S1继续往下查找一个替换m1。复杂度log2(Nt1),Nt1为该步骤前的S1集合大小。
4、一直重复2-3步骤,直到找不到m1或者m2元素。
该算法时间复杂度为
T(n)=N*log2(N1*N2)/(2a)
N为S集合大小,N1是S1集合大小、N2是S2集合大小,a是S1和S2两个集合交叉情况的系数参数。S1和S2存储结构是有序的,无需遍历S1和S2就可以快速算出结果集S,所以该算法在N1和N2比较大,而N比较小的情况下,会取得非常好的效果。其中集合S为键值的有序集合S1和S2的交集,根据S中的键值获得对应的检索结果。
1、取S1中最小的元素m1。
2、在S2找到第一个大于等于m1的元素m2;如果m2和m1不相等,把m1加入到结果集S12。如果m2和m1相等,S2继续往下查找一个替换m2。
3、在S1往下找到所有大于m1小于m2的元素并加入到结果集S12,并把m1替换成S1中第一个大于m2的元素。
4、一直重复2-3步骤,直到找不到m1或者m2元素。两个检索条件的集合并集,就跟刚才多个有序子集的并集一样,建立一个极大堆,把两个集合并集的结果当做一个检索条件一样使用。和有序子集有一点区别是,有序子集间的记录编号不重复,而检索条件的几个集合可能会有相同的编号,所以取最小值过程中需要排重。
即S34=S3∪S4把S34当做一个检索条件。
一个具体的实施为一个四个检索条件的组合如下:
根据上述取非及或运算的介绍,将四条件的检索转换为S12和S34进行与运算的操作,即将多条件的运算进行拆分组合后进行运算。上述具体的多条件检索方式是本发明的重要发明点之一,其结合本发明的数据存储方式,可以大大提高检索效率。
检索步骤S102的具体操作为:根据第一检索条件查询S1的键值范围,按数据存储时排序的集合进行拆分该键值范围,得到多个有序集合和X个无序集合;对S1中的X个无序集合进行排序;对S1的所有子集建立一个极大堆,用每个子集合中最小元素的大小表示子集间的大小关系,最小的集合就在堆顶,S1取最小元素就是堆顶集合的首元素;查找第一个大于等于m1的元素,判断堆顶集合首元素是否小于m1,如果小于m1,堆顶集合通过有序集合二分查找排掉集合中小于m1的元素,使得堆顶集合首元素大于等于m1,然后重新调整堆,然后再次重复判断堆顶集合,直到堆顶集合首元素大于等于m1,此时堆顶首元素就是整个堆所有集合中第一个大于等于m1的元素;采用同样的方式得到S2,其中X为0、1或2。即只有左右边界的集合可能无序。
结合上表,一个具体的实施方式为:超过1000的交易金额的记录{14,2,9,12,1,13,15},就是一个无序集合{14,2}(左边界为无序集合)和一个有序集合{1,9,12,13,15}的并集。
现在S1是一个有序集合和一个无序集合的并集,我们要做的是把多个集合用一个算法当做一个整体,可以快速的找到集合中指定大小元素的位置,有序集合可以通过二分查找。多个有序集合,其实我们可以用堆组织一起,可以较高效的找到指定大小元素所在的位置。
这样子时间复杂度变为了
T(n)=4tlog2(t)+N*N1*N2*log2(N1*N2)/(2t2ab1b2)
t是有序集合的大小,b1是S1子集间的交叉情况系数,b2是S2子集间的交叉情况系统,4tlog2(t),是对无序集合排序的复杂度。可以看到t的增加会增加排序的复杂度,可是可以减少有序子集的个数,减少后部分合并的复杂度,所以可以进一步优化,建立多级排序序列,这样无序集合个数可以使用较小的t,有序子集可以使用各种大小t的组合,减少子集数,提高效率,但是每增加一级排序,记录编号占用空间将增加一份,所以建立几份有序集合需要一定取舍。在N比较小的情况下,大部分t2b1b2会很接近N1*N2,整体时间复杂度会取得很好的效果。这是本发明的重要发明点之一。
进一步参考图3,作为对上述图1所示方法的实现,本申请提供了一种索引数据存储装置的一个实施例,该装置实施例与图1所示的方法实施例相对应,该装置具体可以包含于各种电子设备中。
图3示出了一种索引数据存储装置,该装置包括:
划分模块301,将记录编号和对应字段的值组成一个键值对,记一共有P个键值对,将所有的键值对根据值元素的大小进行排序,将排序后的P个键值对的所有键元素划分为K个集合,每个集合中包括L个键元素(也称为键值,在本发明中,键值与键元素二者是相同的)。
排序模块302,分别对划分好的K个键元素集合按键元素大小进行排序,得到K个对应的键元素有序序列集合。
存储模块303,将P个有序键值对以及对应的K个排序键元素集合分别对应存储。
本发明中的参数,P、L和K显然的为大于0的整数,这是本领域技术人员所能显而易见的知晓的。
在一些实施例中,键值对的总数并不能恰好分成多个集合,即当所有键值对的总数P不为K的整数倍时,最后一个集合的键值对的数量为P-(K-1)*L个,其中P为大于1的整数。
该方法的一个具体的实施例为:为了实现值和记录编号都要有序,这里是用空间换取时间的方法,采用多级顺序表的形式,就是除了字段有序值对应的记录编号外,增加对记录编号排序的存储,并且可以按配置的级别进行分批多段存储。如下表,增加一列每五个连续记录编号进行排序的序列。
L=5表示每5个连续的记录集合进行排序,就是3个大小为5的有序集合组成了所有编号,三个有序集合分别是{5,7,8,10,11}、{2,3,4,6,14}和{1,9,12,13,15},即本实施例中P=15,K=3,L=5,这种数据存储方式即索引结构的建立方式是本发明的重要发明点之一,是后续本发明提出的检索方法的基础。
进一步参考图4,作为对上述图2所示方法的实现,本申请提供了一种数据检索装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以包含于各种电子设备中。
图4示出了一种数据检索装置,该装置包括:
接收模块401,接收输入的第一检索条件和第二检索条件;例如,第一检索条件i是交易时间在昨天以后记录,第二检索条件是交易额超过一千元记录。
检索模块402,根据第一检索条件和第二检索条件在数据库中进行检索分别获得检索结果对应的以键值排序的集合S1和S2。一个实施例是,S1是交易时间在昨天以后记录编号集合,S2是交易额超过一千元记录编号集合,S1、S2都是有序集。
检索结果获得模块403,对键值排序的集合S1和S2进行处理获得检索结果。
本发明中的所述数据库中的数据使用图1所示的方法进行存储。
与运算是多条件检索时常用的运算方式,当所述对键值排序的集合S1和S2进行处理是与运算时,其操作为:
1、取S1中最小的元素m1。时间复杂度1。
2、在S2找到第一个大于等于m1的元素m2;如果m2和m1相等,把m2加入到集合S,S2继续往下查找一个替换m2。有序集合可以二分查找,复杂度log2(Nt2),Nt2为该步骤前的S2集合大小。
3、在S1往下找到第一个大于等于m2的元素m1;如果m1和m2相等,把m1加入到集合S,S1继续往下查找一个替换m1。复杂度log2(Nt1),Nt1为该步骤前的S1集合大小。
4、一直重复2-3步骤,直到找不到m1或者m2元素。
该算法时间复杂度为
T(n)=N*log2(N1*N2)/(2a)
N为S集合大小,N1是S1集合大小、N2是S2集合大小,a是S1和S2两个集合交叉情况的系数参数。S1和S2存储结构是有序的,无需遍历S1和S2就可以快速算出结果集S,所以该算法在N1和N2比较大,而N比较小的情况下,会取得非常好的效果。其中集合S为键值的有序集合S1和S2的交集,根据S中的键值获得对应的检索结果。
1、取S1中最小的元素m1。
2、在S2找到第一个大于等于m1的元素m2;如果m2和m1不相等,把m1加入到结果集S12。如果m2和m1相等,S2继续往下查找一个替换m2。
3、在S1往下找到所有大于m1小于m2的元素并加入到结果集S12,并把m1替换成S1中第一个大于m2的元素。
4、一直重复2-3步骤,直到找不到m1或者m2元素。两个检索条件的集合并集,就跟刚才多个有序子集的并集一样,建立一个极大堆,把两个集合并集的结果当做一个检索条件一样使用。和有序子集有一点区别是,有序子集间的记录编号不重复,而检索条件的几个集合可能会有相同的编号,所以取最小值过程中需要排重。
即S34=S3∪S4把S34当做一个检索条件。
一个具体的实施为一个四个检索条件的组合如下:
根据上述取非及或运算的介绍,将四条件的检索转换为S12和S34进行与运算的操作,即将多条件的运算进行拆分组合后进行运算。上述具体的多条件检索方式是本发明的重要发明点之一,其结合本发明的数据存储方式,可以大大提高检索效率。
检索模块402执行的具体操作为:根据第一检索条件查询S1的键值范围,按数据存储时排序的集合进行拆分该键值范围,得到多个有序集合和X个无序集合;对S1中的X个无序集合进行排序;对S1的所有子集建立一个极大堆,用每个子集合中最小元素的大小表示子集间的大小关系,最小的集合就在堆顶,S1取最小元素就是堆顶集合的首元素;查找第一个大于等于m1的元素,判断堆顶集合首元素是否小于m1,如果小于m1,堆顶集合通过有序集合二分查找排掉集合中小于m1的元素,使得堆顶集合首元素大于等于m1,然后重新调整堆,然后再次重复判断堆顶集合,直到堆顶集合首元素大于等于m1,此时堆顶首元素就是整个堆所有集合中第一个大于等于m1的元素;采用同样的方式得到S2,其中X为0、1或2。即只有左右边界的集合可能无序。
结合上表,一个具体的实施方式为:超过1000的交易金额的记录{14,2,9,12,1,13,15},就是一个无序集合{14,2}(左边界为无序集合)和一个有序集合{1,9,12,13,15}的并集。
现在S1是一个有序集合和一个无序集合的并集,我们要做的是把多个集合用一个算法当做一个整体,可以快速的找到集合中指定大小元素的位置,有序集合可以通过二分查找。多个有序集合,其实我们可以用堆组织一起,可以较高效的找到指定大小元素所在的位置。
这样子时间复杂度变为了
T(n)=4tlog2(t)+N*N1*N2*log2(N1*N2)/(2t2ab1b2)
t是有序集合的大小,b1是S1子集间的交叉情况系数,b2是S2子集间的交叉情况系统,4tlog2(t),是对无序集合排序的复杂度。可以看到t的增加会增加排序的复杂度,可是可以减少有序子集的个数,减少后部分合并的复杂度,所以可以进一步优化,建立多级排序序列,这样无序集合个数可以使用较小的t,有序子集可以使用各种大小t的组合,减少子集数,提高效率,但是每增加一级排序,记录编号占用空间将增加一份,所以建立几份有序集合需要一定取舍。在N比较小的情况下,大部分t2b1b2会很接近N1*N2,整体时间复杂度会取得很好的效果。这是本发明的重要发明点之一。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
最后所应说明的是:以上实施例仅以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (9)
1.一种索引数据存储方法,其特征在于,该方法包括:
划分步骤,将记录编号和对应字段的值组成一个键值对,记一共有P个键值对,将所有的键值对根据值元素的大小进行排序,将排序后的P个键值对的所有键元素划分为K个集合,每个集合中包括L个键元素;
排序步骤,分别对划分好的K个键元素集合按键元素大小进行排序,得到K个对应的键元素有序序列集合;
存储步骤,将P个有序键值对以及对应的K个排序键元素集合分别对应存储;
其中,L为大于0的整数、K为大于0的整数。
3.根据权利要求1所述的方法,其特征在于,当所有键值对的总数P不为K的整数倍时,最后一个集合的键值对的数量为P-(K-1)*L个,其中P为大于1的整数。
4.一种数据检索方法,其特征在于,该方法包括:
接收步骤,接收输入的第一检索条件和第二检索条件;
检索步骤,根据第一检索条件和第二检索条件在数据库中进行检索分别获得检索结果对应的以键值排序的集合S1和S2;
检索结果获得步骤,对键值排序的集合S1和S2进行处理获得检索结果;其中,所述数据库中的数据使用权利要求1-3任一项所述的方法进行存储。
5.根据权利要求4所述的方法,其特征在于,所述对键值排序的集合S1和S2进行处理是与运算时,其操作为:所述对键值排序的集合S1和S2进行处理是与运算时,其操作为:取S1中最小的元素m1;在S2找到第一个大于等于m1的元素m2;如果m2和m1相等,把m2加入到集合S,S2继续往下查找一个替换m2;在S1往下找到第一个大于等于m2的元素m1;如果m1和m2相等,把m1加入到集合S,S1继续往下查找一个替换m1;重复S2中取m2,S1中取m1,直到m1或者m2获取不到元素为止,其中集合S为有序集合S1和S2的交集,根据S中的键值获得对应的检索结果。
6.根据权利要求4所述的方法,其特征在于,所述对键值排序的集合S1和S2进行处理是取非运算时,其操作为:取S1中最小的元素m1;在S2找到第一个大于等于m1的元素m2;如果m2和m1不相等,把m1加入到集合S,如果m2和m1相等,S2继续往下查找一个替换m2;在S1往下找到所有大于m1小于m2的元素并加入到结果集S,并把m1替换成S1中第一个大于m2的元素;重复S2中取m2,S1中取m1,直到m1或者m2获取不到元素为止,其中集合S为有序集合S1对S2取非操作后的结果,根据S中的键值获得对应的检索结果。
7.根据权利要求4所述的方法,其特征在于,所述对键值排序的集合S1和S2进行处理是或运算时,其操作为:通过建立一个极大堆进行或的运算。
8.根据权利要求5-7之一所述的方法,其特征在于,检索步骤的具体操作为:根据第一检索条件查询S1的键值范围,按数据存储时排序的集合进行拆分该键值范围,得到多个有序集合和X个无序集合;对S1中的X个无序集合进行排序;对S1的所有子集建立一个极大堆,用每个子集合中最小元素的大小表示子集间的大小关系,最小的集合就在堆顶,S1取最小元素就是堆顶集合的首元素;查找第一个大于等于m1的元素,判断堆顶集合首元素是否小于m1,如果小于m1,堆顶集合通过有序集合二分查找排掉集合中小于m1的元素,使得堆顶集合首元素大于等于m1,然后重新调整堆,然后再次重复判断堆顶集合,直到堆顶集合首元素大于等于m1,此时堆顶首元素就是整个堆所有集合中第一个大于等于m1的元素;采用同样的方式得到S2,其中X为0、1或2。
9.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序代码,当所述计算机程序代码被计算机执行时执行权利要求1-8之任一的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811091065.6A CN109325032B (zh) | 2018-09-18 | 2018-09-18 | 一种索引数据存储及检索方法、装置及存储介质 |
EP19797156.7A EP3654195A4 (en) | 2018-09-18 | 2019-08-02 | METHODS AND DEVICES FOR STORING AND RECALLING INDEX DATA AND STORAGE MEDIUM |
PCT/CN2019/099125 WO2020057272A1 (zh) | 2018-09-18 | 2019-08-02 | 一种索引数据存储及检索方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811091065.6A CN109325032B (zh) | 2018-09-18 | 2018-09-18 | 一种索引数据存储及检索方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109325032A CN109325032A (zh) | 2019-02-12 |
CN109325032B true CN109325032B (zh) | 2020-10-27 |
Family
ID=65264838
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811091065.6A Active CN109325032B (zh) | 2018-09-18 | 2018-09-18 | 一种索引数据存储及检索方法、装置及存储介质 |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP3654195A4 (zh) |
CN (1) | CN109325032B (zh) |
WO (1) | WO2020057272A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109325032B (zh) * | 2018-09-18 | 2020-10-27 | 厦门市美亚柏科信息股份有限公司 | 一种索引数据存储及检索方法、装置及存储介质 |
CN110377642B (zh) * | 2019-07-24 | 2020-06-02 | 杭州太尼科技有限公司 | 一种快速获取有序序列数据的装置 |
CN112395336B (zh) * | 2020-11-27 | 2024-03-19 | 北京卫星环境工程研究所 | 一种长时间序列数据管理和可视化方法 |
CN112800059B (zh) * | 2021-01-27 | 2022-07-08 | 国电南瑞南京控制系统有限公司 | 新能源电站运维巡检表单数据存储方法、装置及系统 |
CN112632157B (zh) * | 2021-03-11 | 2021-07-27 | 全时云商务服务股份有限公司 | 一种分布式系统下的多条件分页查询方法 |
CN113378995B (zh) * | 2021-07-09 | 2024-03-12 | 中山大学 | 基于iDistance算法的不确定数据序列K近邻方法及系统 |
CN117573726B (zh) * | 2024-01-12 | 2024-05-03 | 新疆原行网智慧文旅有限公司 | 一种基于大数据的订单信息智能搜索方法 |
CN117573703B (zh) * | 2024-01-16 | 2024-04-09 | 科来网络技术股份有限公司 | 时序数据的通用检索方法、系统、设备及存储介质 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3920719B2 (ja) * | 2002-06-21 | 2007-05-30 | 三洋電機株式会社 | コンテンツ再生装置 |
US7698262B2 (en) * | 2006-03-29 | 2010-04-13 | Electronics And Telecommunications Research Institute | Apparatus and method for searching multimedia data based on metadata |
CN101751406B (zh) * | 2008-12-18 | 2012-01-04 | 赵伟 | 一种实现基于列存储的关系型数据库的方法及装置 |
CN101770291B (zh) * | 2009-04-30 | 2012-08-15 | 广东国笔科技股份有限公司 | 输入系统语意分析数据散列存储和分析方法 |
WO2013098886A1 (ja) * | 2011-12-27 | 2013-07-04 | 三菱電機株式会社 | 検索装置 |
CN103678293B (zh) * | 2012-08-29 | 2020-03-03 | 百度在线网络技术(北京)有限公司 | 一种数据存储方法及装置 |
CN104252481B (zh) * | 2013-06-27 | 2018-10-19 | 阿里巴巴集团控股有限公司 | 主从数据库一致性的动态校验方法和装置 |
CN105930453A (zh) * | 2016-04-21 | 2016-09-07 | 乐视控股(北京)有限公司 | 重复性分析方法及装置 |
CN105956085B (zh) * | 2016-04-29 | 2019-08-27 | 优酷网络技术(北京)有限公司 | 一种倒排索引的构建方法和装置、检索方法和装置 |
CN107391502B (zh) * | 2016-05-16 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 时间间隔的数据查询方法、装置及索引构建方法、装置 |
CN109325032B (zh) * | 2018-09-18 | 2020-10-27 | 厦门市美亚柏科信息股份有限公司 | 一种索引数据存储及检索方法、装置及存储介质 |
-
2018
- 2018-09-18 CN CN201811091065.6A patent/CN109325032B/zh active Active
-
2019
- 2019-08-02 WO PCT/CN2019/099125 patent/WO2020057272A1/zh unknown
- 2019-08-02 EP EP19797156.7A patent/EP3654195A4/en not_active Ceased
Also Published As
Publication number | Publication date |
---|---|
EP3654195A4 (en) | 2021-04-28 |
CN109325032A (zh) | 2019-02-12 |
EP3654195A1 (en) | 2020-05-20 |
WO2020057272A1 (zh) | 2020-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109325032B (zh) | 一种索引数据存储及检索方法、装置及存储介质 | |
US7558802B2 (en) | Information retrieving system | |
US10521441B2 (en) | System and method for approximate searching very large data | |
CN111324750B (zh) | 一种大规模文本相似度计算及文本查重方法 | |
CN104715039A (zh) | 基于硬盘和内存的列式存储和查询方法及设备 | |
US6735600B1 (en) | Editing protocol for flexible search engines | |
CN111801665A (zh) | 用于大数据应用的分层局部敏感哈希(lsh)分区索引 | |
JP6726690B2 (ja) | 基本データシーブを用いて無損失削減されたデータに対する多次元検索、コンテンツ連想的な取出し、ならびにキーワードベースの検索および取出しの実行 | |
CN111666468A (zh) | 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法 | |
CN114691721A (zh) | 图数据的查询方法、装置、电子设备及存储介质 | |
WO2016038749A1 (en) | A method for efficient one-to-one join | |
CN112434085B (zh) | 基于Roaring Bitmap的用户数据统计方法 | |
CN116821053B (zh) | 数据上报方法、装置、计算机设备和存储介质 | |
JP2007233554A (ja) | 高速パターンマッチング装置の探索方法 | |
US11736119B2 (en) | Semi-sorting compression with encoding and decoding tables | |
CN112148359B (zh) | 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质 | |
JP3534471B2 (ja) | マージソート方法及びマージソート装置 | |
KR100892406B1 (ko) | 정보 검색 방법 및 그 시스템 | |
CN110377642B (zh) | 一种快速获取有序序列数据的装置 | |
CN112860734A (zh) | 地震数据多维度范围查询方法及装置 | |
JP2001052024A (ja) | 類似特徴量の検索方法及び装置及び類似特徴量の検索プログラムを格納した記憶媒体 | |
KR101664712B1 (ko) | 해시 테이블 접근 없이 참 양성 여부를 판단할 수 있는 블룸 필터 쿼리 장치 및 그 방법 | |
CN111868710B (zh) | 搜索大规模非结构化数据的随机提取森林索引结构 | |
US11734282B1 (en) | Methods and systems for performing a vectorized delete in a distributed database system | |
CN117725096B (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 |