CN105808654A - 一种针对流数据的二级排序方法 - Google Patents
一种针对流数据的二级排序方法 Download PDFInfo
- Publication number
- CN105808654A CN105808654A CN201610109615.7A CN201610109615A CN105808654A CN 105808654 A CN105808654 A CN 105808654A CN 201610109615 A CN201610109615 A CN 201610109615A CN 105808654 A CN105808654 A CN 105808654A
- Authority
- CN
- China
- Prior art keywords
- data
- array
- level
- grades
- subnumber group
- 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.)
- Pending
Links
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/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90348—Query processing by searching ordered data, e.g. alpha-numerically ordered data
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据排序技术领域,特比是一种针对流数据的二级排序方法,包括以下步骤,步骤S101:建立数据结构,数据结构为二级排序结构,包括由一个数组构成的第一级排序结构和由若干数组构成的第二级排序结构,其中第一级排序结构为第二级排序结构的索引;步骤S102:第一级排序结构查找,等待数据到达,到达数据在第一级排序结构中查找,定位到第二级排序结构中的某个数组;步骤S103:第二级排序结构排序,将到达数据***查找到的第二级排序结构中的数组中,返回步骤S102。采用上述方法后,本发明能够在数据规模不可知的情况下,对大量持续到达的数据进行快速排序,能够大幅度缩小查找和排序的规模。
Description
技术领域
本发明涉及数据排序技术领域,特比是一种针对流数据的二级排序方法。
背景技术
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的数据调整为“有序”的数据。数据排序不是一个新问题,已经有了非常多的经典排序算法,但都是较为通用的算法,有较多的限制,例如需要预先知道数据的整体情况并且将数据全部装载到内存后才能开始排序。流数据一组大量、快速、连续到达的数据序列,可被视为一个随时间延续而无限增长的动态数据集合。
中国发明专利CN103577559A公开了一种数据排序方法,将待排序数据分批读入内存,每读入一段数据,对所述读入的数据进行排序,得到有序数据段;再进行压缩,得到压缩数据段;将每次压缩后得到的压缩数据段写入所述存储介质;当所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,并进行归并,得到合并数据段;对所述合并数据段进行解压,获取排序数据;将所述排序数据写入所述存储介质。但是,流数据非常有可能是大规模数据,因此单一的数据结构或者算法无法适用;同时,由于流数据是持续到达的数据序列,数据规模预先不可知;所以,上述发明的方法无法对流数据进行很好的排序。
发明内容
本发明需要解决的技术问题一种针对流数据的快速排序方法。
为解决上述的技术问题,本发明的一种针对流数据的二级排序方法,包括以下步骤,
步骤S101:建立数据结构,数据结构为二级排序结构,包括由一个数组构成的的第一级排序结构和由若干数组构成的第二级排序结构,其中第一级排序结构为第二级排序结构的索引;
步骤S102:第一级排序结构查找,等待数据到达,到达数据在第一级排序结构中查找,定位到第二级排序结构中的某个数组;
步骤S103:第二级排序结构排序,将到达数据***查找到的第二级排序结构中的数组中,返回步骤S102。
进一步的,所述第一级排序结构的一个数组为一级数组,第二级排序结构的若干数组为二级数组,所述二级数组中的某个数组为子数组。
更进一步的,所述一级数组存储一个二元组,所述二元组由各个子数组的最大数据和相应子数组的地址构成;所述一级数组基于二元组中的最大数据进行排序。
更进一步的,所述步骤S102包括以下步骤,
步骤S1021:等待数据到达,等待到达数据;
步骤S1022:一级数组查找,在一级数组中查找到达数据在二级数组中的排序位置;
步骤S1023:定位子数组,根据到达数据在二级数组中的排序位置定位某个子数组。
更进一步的,所述步骤S103包括以下步骤,
步骤S1031:判断子数组可用量是否为零,如果是,则进入步骤S1032;如果否,则进入步骤S1036;
步骤S1032:子数组***,将原子数组***出一个容量一致的新子数组,更新和增加一级数组中的对应二元组;
步骤S1033:判断一级数组可用量是否为零,如果是,则进入步骤S1035;如果否,则进入步骤S1034;
步骤S1034:新一级数组生成,重新生成一个更大容量的一级数组,并将原有数据拷贝至新的一级数组中;
步骤S1035:定位新子数组,定位新***子数组中的一个;
步骤S1036:***到达数据,将到达数据***子数组中,返回步骤S1021。
更进一步的,所述步骤S1032中以原子数组中心位置为起始,将原子数组中后部分数据存储于新子数组中,并更新和增加以及数组中对应的二元组。
更进一步的,基于到达数据,在定位到的子数组上使用二分查找法,找到***点,将***点后的数据全部后移一位,***到达数据。
采用上述方法后,本发明能够在数据规模不可知的情况下,对大量持续到达的数据进行快速排序,当流数据结束时,排序即完成;保证数据局部有序,一级数组可以看做是二级数组的索引,保证了数据整体的有序性,能够大幅度缩小查找和排序的规模。
附图说明
下面将结合附图和具体实施方式对本作进一步详细的说明。
图1为本发明一种针对流数据的二级排序方法的流程图。
具体实施方式
如图1所示,本发明的一种针对流数据的二级排序方法,包括以下步骤,
步骤S101:建立数据结构,数据结构为二级排序结构,包括由一个数组构成的的第一级排序结构和由若干数组构成的第二级排序结构,其中第一级排序结构为第二级排序结构的索引。所述第一级排序结构的一个数组为一级数组,第二级排序结构的若干数组为二级数组,所述二级数组中的某个数组为子数组。本实施方式中一级排序结构为第二级排序结构的索引采用的方式是,一级数组中存储的是一个二元组,二元组由各个子数组的最大数据和相应子数组的地址构成,同时一级数组基于二元组中的最大数据进行排序;子数组中存储的是需要排序的数据,且都是有序的。二级排序结构将大规模数据进行了拆分,使用多个子数组进行存储,保证数据局部有序,一级数组可以看做是二级数组的索引,保证了数据整体的有序性,能够大幅度缩小查找和排序的规模,体现了大化小的思想。
步骤S102:第一级排序结构查找,等待数据到达,到达数据在第一级排序结构中查找,定位到第二级排序结构中的某个数组。具体包括以下步骤,
步骤S1021:等待数据到达,等待到达数据。
步骤S1022:一级数组查找,在一级数组中查找到达数据在二级数组中的排序位置。
步骤S1023:定位子数组,根据到达数据在二级数组中的排序位置定位某个子数组。
步骤S103:第二级排序结构排序,将到达数据***查找到的第二级排序结构中的数组中,返回步骤S102。具体包括以下步骤,
步骤S1031:判断子数组可用量是否为零,如果是,则进入步骤S1032;如果否,则进入步骤S1034。对于一级数组而言,当存储容量不足时,需要进行自动扩展;对于子数组来说,只存储一定量的数据(例如:1000个数据),初始时,二级数组只包含一个子数组,当该子数组可用量为0时,该子数组自动***出1个新的子数组,新***出的子数组容量与原有子数组一致,以原有子数组中心的位置为起始,将后500个数据存储于新子数组,并更新和增加一级数组中对应的二元组,基于此逻辑,在内存足够的情况下,可以无限***和扩展。
步骤S1032:子数组***,将原子数组***出一个容量一致的新子数组,更新和增加一级数组中的对应二元组。
步骤S1033:判断一级数组可用量是否为零,如果是,则进入步骤S1035;如果否,则进入步骤S1034。
步骤S1034:新一级数组生成,重新生成一个更大容量的一级数组,并将原有数据拷贝至新的一级数组中。如果子数组可用量为零的话,该子数组自动***出1个新子数组,并将原有子数组的数据从中间分为2部分,后半部分存储到新***出的子数组中,对于原有子数组需要在一级数组中更新对应二元组的最大数值,而新***出的子数组需要在一级数组中增加二元组(若一级数组没有可用量,则以0.5的倍率,重新生成一个更大容量的一级数组,并将原有数据拷贝至新的一级数组中),并保持一级数组有序。
步骤S1035:定位新子数组,定位新***子数组中的一个。基于到达数据,在原有子数组和新***的子数组中定位,即判定该数据是落在前半部分还是后半部分,重新定位子数组。
步骤S1036:***到达数据,将到达数据***子数组中,返回步骤S1021。这里基于单次到达数据,在定位到的子数组上使用二分查找法,找到***点,将***点后的数据全部后移一位,***单次到达数据。
虽然以上描述了本发明的具体实施方式,但是本领域熟练技术人员应当理解,这些仅是举例说明,可以对本实施方式作出多种变更或修改,而不背离发明的原理和实质,本发明的保护范围仅由所附权利要求书限定。
Claims (7)
1.一种针对流数据的二级排序方法,其特征在于,包括以下步骤,
步骤S101:建立数据结构,数据结构为二级排序结构,包括由一个数组构成的的第一级排序结构和由若干数组构成的第二级排序结构,其中第一级排序结构为第二级排序结构的索引;
步骤S102:第一级排序结构查找,等待数据到达,到达数据在第一级排序结构中查找,定位到第二级排序结构中的某个数组;
步骤S103:第二级排序结构排序,将到达数据***查找到的第二级排序结构中的数组中,返回步骤S102。
2.按照权利要求1所述的一种针对流数据的二级排序方法,其特征在于:所述第一级排序结构的一个数组为一级数组,第二级排序结构的若干数组为二级数组,所述二级数组中的某个数组为子数组。
3.按照权利要求2所述的一种针对流数据的二级排序方法,其特征在于:所述一级数组存储一个二元组,所述二元组由各个子数组的最大数据和相应子数组的地址构成;所述一级数组基于二元组中的最大数据进行排序。
4.按照权利要求3所述的一种针对流数据的二级排序方法,其特征在于,所述步骤S102包括以下步骤,
步骤S1021:等待数据到达,等待到达数据;
步骤S1022:一级数组查找,在一级数组中查找到达数据在二级数组中的排序位置;
步骤S1023:定位子数组,根据到达数据在二级数组中的排序位置定位某个子数组。
5.按照权利要求4所述的一种针对流数据的二级排序方法,其特征在于,所述步骤S103包括以下步骤,
步骤S1031:判断子数组可用量是否为零,如果是,则进入步骤S1032;如果否,则进入步骤S1036;
步骤S1032:子数组***,将原子数组***出一个容量一致的新子数组,更新和增加一级数组中的对应二元组;
步骤S1033:判断一级数组可用量是否为零,如果是,则进入步骤S1035;如果否,则进入步骤S1034;
步骤S1034:新一级数组生成,重新生成一个更大容量的一级数组,并将原有数据拷贝至新的一级数组中;
步骤S1035:定位新子数组,定位新***子数组中的一个;
步骤S1036:***到达数据,将到达数据***子数组中,返回步骤S1021。
6.按照权利要求5所述的一种针对流数据的二级排序方法,其特征在于:所述步骤S1032中以原子数组中心位置为起始,将原子数组中后部分数据存储于新子数组中,并更新和增加以及数组中对应的二元组。
7.按照权利要求4-6中任一项所述的一种针对流数据的二级排序方法,其特征在于:基于到达数据,在定位到的子数组上使用二分查找法,找到***点,将***点后的数据全部后移一位,***到达数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610109615.7A CN105808654A (zh) | 2016-02-29 | 2016-02-29 | 一种针对流数据的二级排序方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610109615.7A CN105808654A (zh) | 2016-02-29 | 2016-02-29 | 一种针对流数据的二级排序方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105808654A true CN105808654A (zh) | 2016-07-27 |
Family
ID=56465850
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610109615.7A Pending CN105808654A (zh) | 2016-02-29 | 2016-02-29 | 一种针对流数据的二级排序方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105808654A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1380606A (zh) * | 2001-04-11 | 2002-11-20 | 陈启星 | 通过计算实现分级定位的排序和查找的方法 |
CN1728087A (zh) * | 2004-07-30 | 2006-02-01 | 英特尔公司 | 用排序向量实施存储器排序模型的方法与设备 |
CN101131692A (zh) * | 2006-08-25 | 2008-02-27 | 陈启星 | 分级统计-概率计算式查找算法 |
CN103745008A (zh) * | 2014-01-28 | 2014-04-23 | 河海大学 | 一种大数据索引的排序方法 |
CN104077361A (zh) * | 2014-06-09 | 2014-10-01 | 汉柏科技有限公司 | 一种用于大数据的排序方法及*** |
-
2016
- 2016-02-29 CN CN201610109615.7A patent/CN105808654A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1380606A (zh) * | 2001-04-11 | 2002-11-20 | 陈启星 | 通过计算实现分级定位的排序和查找的方法 |
CN1728087A (zh) * | 2004-07-30 | 2006-02-01 | 英特尔公司 | 用排序向量实施存储器排序模型的方法与设备 |
CN101131692A (zh) * | 2006-08-25 | 2008-02-27 | 陈启星 | 分级统计-概率计算式查找算法 |
CN103745008A (zh) * | 2014-01-28 | 2014-04-23 | 河海大学 | 一种大数据索引的排序方法 |
CN104077361A (zh) * | 2014-06-09 | 2014-10-01 | 汉柏科技有限公司 | 一种用于大数据的排序方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104021161B (zh) | 一种聚簇存储方法及装置 | |
Harwood et al. | Fanng: Fast approximate nearest neighbour graphs | |
CN104679778B (zh) | 一种搜索结果的生成方法及装置 | |
US10089379B2 (en) | Method for sorting data | |
CN109325032B (zh) | 一种索引数据存储及检索方法、装置及存储介质 | |
JP2010503117A (ja) | 動的フラグメントマッピング | |
CN103440246A (zh) | 用于MapReduce的中间结果数据排序方法及*** | |
CN103345496A (zh) | 多媒体信息检索方法和*** | |
CN111801665A (zh) | 用于大数据应用的分层局部敏感哈希(lsh)分区索引 | |
JP4758429B2 (ja) | 共有メモリ型マルチプロセッサシステム及びその情報処理方法 | |
Adamu et al. | A survey on big data indexing strategies | |
CN108509505A (zh) | 一种基于分区双数组Trie的字符串检索方法及装置 | |
EP3362808B1 (en) | Cache optimization for data preparation | |
KR20170065374A (ko) | 버킷 단위의 정렬을 기반으로 하는 해시 충돌 처리 방법 | |
US10642918B2 (en) | Efficient publish/subscribe systems | |
CN100476824C (zh) | 存储元素的方法与***及查找元素的方法与*** | |
CN103119606B (zh) | 一种大规模图像数据的聚类方法及装置 | |
CN102207935A (zh) | 用于创建索引的方法和*** | |
WO2016038749A1 (en) | A method for efficient one-to-one join | |
CN105808654A (zh) | 一种针对流数据的二级排序方法 | |
CN113495901B (zh) | 一种面向可变长数据块的快速检索方法 | |
CN112860734A (zh) | 地震数据多维度范围查询方法及装置 | |
CN109241098B (zh) | 一种分布式数据库的查询优化方法 | |
CN102306187A (zh) | 二维表hash排序方法 | |
CN101127052A (zh) | 一种有序链表节点的快速搜索方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160727 |