CN111971667B - 可恢复的合并排序 - Google Patents
可恢复的合并排序 Download PDFInfo
- Publication number
- CN111971667B CN111971667B CN201980025244.6A CN201980025244A CN111971667B CN 111971667 B CN111971667 B CN 111971667B CN 201980025244 A CN201980025244 A CN 201980025244A CN 111971667 B CN111971667 B CN 111971667B
- Authority
- CN
- China
- Prior art keywords
- blocks
- volatile memory
- ordered
- block
- unordered
- 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
- 238000000034 method Methods 0.000 claims abstract description 88
- 239000000872 buffer Substances 0.000 claims description 99
- 230000008569 process Effects 0.000 description 70
- 238000010586 diagram Methods 0.000 description 24
- 238000007726 management method Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 238000012163 sequencing technique Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 239000000725 suspension Substances 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000013501 data transformation Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000013341 scale-up Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/06—Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
- G06F7/14—Merging, i.e. combining at least two sets of record carriers each arranged in the same ordered sequence to produce a single set having the same ordered sequence
- G06F7/16—Combined merging and sorting
-
- 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/21—Design, administration or maintenance of databases
- G06F16/217—Database tuning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24561—Intermediate data storage techniques for performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/24—Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Computer Hardware Design (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Retry When Errors Occur (AREA)
Abstract
一种方法可以包括:接收数据库命令以对未排序数据集进行排序;将用于对未排序数据集进行排序的排序操作划分为多个部分;执行排序操作的第一部分;保持来自排序操作的第一部分的中间结果;以及保持排序操作的状态,该状态标识排序操作的已经被执行的部分。
Description
技术领域
本公开总体涉及计算机领域,具体地,涉及可恢复的合并排序。
背景技术
计算机和计算系统几乎影响了现代生活的每个方面。计算机通常涉及工作、游艺、医疗保健、运输、娱乐、家庭管理等。这些计算系统可以采用数据库系统,数据库系统可以被查询以检索结果。为了有效地查询数据库,数据库系统可以对存储在数据库中的表中的数据进行索引和/或排序。
发明内容
一种计算机系统可以包括:处理器;以及计算机可读介质,计算机可读介质具有存储的指令,指令是处理器可执行的,以将计算机系统配置为:接收数据库命令以对未排序数据集进行排序;将用于对未排序数据集进行排序的排序操作划分为多个部分;执行排序操作的第一部分;保持来自排序操作的第一部分的中间结果;以及保持排序操作的状态,该状态标识排序操作的已经被执行的部分。
计算机可读介质还可以存储指令,该指令是处理器可执行的,以将计算机系统进一步配置为:在排序操作被暂停后,基于排序操作的保持的状态,恢复排序操作。
计算机可读介质还可以存储指令,该指令是处理器可执行的,以将计算机系统进一步配置为:当执行排序操作的第一部分时,将未排序数据集的多个未排序块从非易失性存储器读取到易失性存储器中,存储多个未排序块中的每个未排序块,以生成对应的多个经排序块,以及将对应的多个经排序块保持到非易失性存储器。计算机可读介质还可以存储指令,该指令是处理器可执行的,以将计算机系统进一步配置为:当保持排序操作的状态时,保持第一元数据,该第一元数据标识未排序数据集的一部分,该一部分对应于保持的对应的多个经排序块。
计算机可读介质可以存储指令,该指令是处理器可执行的,以将计算机系统进一步配置为:当将对应的多个经排序块保持到非易失性存储器时,将对应的多个经排序块提交给边表。
计算机可读介质可以存储指令,该指令是处理器可执行的,以将计算机系统进一步配置为:当读取多个未排序块时,基于服务水平协议,读取未排序块到最大块尺寸,以及在排序操作被暂停后,基于保持的第一元数据,恢复排序操作。
计算机可读介质可以存储指令,该指令是处理器可执行的,以将计算机系统进一步配置为:当执行排序操作的第一部分时,将多个经排序块读取到多个输入缓冲器中,将多个经排序块读取到输出缓冲器中,以及当输出缓冲器是满的时,将输出缓冲器中的数据读取到非易失性存储器。计算机可读介质可以存储指令,该指令是处理器可执行的,以将计算机系统进一步配置为:当保持排序操作的状态时:读取第二元数据,第二元数据标识经排序块的一部分,该一部分对应于输出缓冲器中的保持的数据。
计算机可读介质可以存储指令,该指令是处理器可执行的,以将计算机系统配置为:当将对应的多个经排序块保持到非易失性存储器时,将对应的多个经排序块提交给边表,并且当将输出缓冲器中的数据保持到非易失性存储器时,将输出缓冲器中的数据提交给边表。计算机可读介质可以存储指令,该指令是处理器可执行的,以将计算机系统进一步配置为:在排序操作被暂停后,基于保持的第二元数据,恢复排序操作。
计算机可读介质可以存储指令,该指令是处理器可执行的,以将计算机系统配置为:在排序操作被暂停后,利用执行排序操作的不同数目的计算线程,恢复排序操作。
一种方法可以包括:接收数据库命令以对未排序数据集进行排序;将用于对未排序数据集进行排序的排序操作划分为多个部分;执行排序操作的第一部分;保持来自排序操作的第一部分的中间结果;以及保持排序操作的状态,该状态标识排序操作的已经被执行的部分。
该方法可以包括在排序操作被暂停后,基于排序操作的保持的状态,恢复排序操作。
执行排序操作的第一部分可以包括:将未排序数据集的多个未排序块从非易失性存储器读取到易失性存储器中,对多个未排序块中的每个未排序块进行排序,以生成对应的多个经排序块,以及将对应的多个经排序块保持到非易失性存储器。
保持排序操作的状态可以包括:保持第一元数据,第一元数据标识未排序数据集的一部分,该一部分对应于保持的对应的多个经排序块。将对应的多个经排序块保持到非易失性存储器可以包括将对应的多个经排序块提交给边表。
读取多个未排序块可以包括:基于服务水平协议,读取未排序块到最大块尺寸。该方法还可以包括:在排序操作被暂停后,基于保持的第一元数据,恢复排序操作。
执行排序操作的第一部分可以包括:将多个经排序块读取到多个输入缓冲器中,将多个经排序块合并到输出缓冲器中,以及当输出缓冲器是满的时,将输出缓冲器中的数据保持到非易失性存储器。保持排序操作的状态可以包括:保持第二元数据,第二元数据标识经排序块的一部分,该一部分对应于输出缓冲器中的保持的数据。
将对应的多个经排序块保持到非易失性存储器可以包括:将对应的多个经排序块提交给边表,并且将输出缓冲器中的数据保持到非易失性存储器可以包括:将输出缓冲器中的数据提交给边表。该方法还可以包括:在排序操作被暂停后,基于保持的第二元数据,恢复排序操作;以及在排序操作被暂停后,基于保持的第二元数据,利用执行排序操作的不同数目的计算线程,恢复排序操作。
附图说明
图1图示了具有未排序数据集和经排序数据集的数据库的框图;
图2是包括数据库服务器和用户终端的系统的框图;
图3A是计算模块的示例性组件的框图;
图3B是存储在存储器中的功能组件的框图;
图4A是一个实施例中的示例性未排序数据集的框图;
图4B、图4C、图4D和图4E是一个实施例中的示例性边表的框图;
图5A、图5B、图5C和图5D是一个实施例中的可以用于可恢复排序运行的元数据的框图;
图6是一个实施例中的示例性可恢复排序的流程图;
图7A是一个实施例中的在可恢复合并期间的易失性存储器的框图;
图7B是输入边表已经被合并成输出边表的框图;
图8是一个实施例中的可恢复合并的流程图;以及
图9是一个实施例中的用于恢复暂停的排序的示例性过程的流程图。
具体实施方式
以下详细描述参考附图。不同附图中的相同附图标记可以标识相同或相似的元件。同样,以下详细描述仅是示例性和说明性的,并且不限制所要求保护的本发明。
如上所述,数据库系统可以对数据库中的数据的表进行索引和/或排序。如果排序操作故障,则可能会丢失该操作执行的工作的大部分(如果不是全部的话)。结果,排序操作可能必须从头开始重新启动。附加地,作为单个事务执行的排序操作可能生成大的日志,一些数据库系统可能无法处理该日志。结果,数据库系统可能无法完成该事务,而是将数据库表“回滚”或返回到其原始状态,而不完成排序。由于大型表的排序操作可能要花费数小时来完成,并且会消耗大量资源,因此必须从头开始重新启动排序操作可能不太理想。
下面讨论的实施例可以实现数据库操作(诸如表中的数据的排序),该数据库操作可以在系统故障后被恢复,同时减少工作的丢失。一些实施例使用户能够手动暂停和/或恢复排序。在其他实施例中,诸如当服务器迁移到新硬件或故障转移到新硬件时,可以自动暂停和自动恢复排序。一些实施例使得能够配置在排序故障或排序暂停期间丢失的工作的量,以便遵守服务水平协议(SLA)。一些实施例使得能够按比例放大或缩小处理排序的线程数目,而不会造成工作损失(或使工作损失最小化)。一些实施例可以减小日志的尺寸和/或事务的长度以限制回滚。
下面描述的实施例涉及在关系数据库中对表进行排序。例如,原理和概念可以应用于关系数据库以外的外部排序。此外,实施例可以被实施在可从MICROSOFT(TM)公司获得的SQL SERVER(TM)或AZURE SQL SERVER(TM)中。一般地,本文描述的概念可以应用于其他数据库产品或其他数据存储和/或数据处理产品。
图1图示了具有未排序数据集104的数据库102的框图。用户、应用、组件或操作可以在数据集104上发起排序操作,该排序操作使得经排序数据集106被创建。在一个实施例中,如果排序未能完成,则可以恢复排序,同时减少工作损失(即,不必从头开始排序)。备选地,如果用户手动暂停排序操作,则用户可以恢复排序而不必从头开始排序。用户可能希望暂停排序操作,例如,以运行其他进程或操作。而且,排序可以被暂停以将排序操作从一个服务器迁移到另一个服务器(即,暂停一个服务器上的排序操作并且在另一个服务器上恢复它)。用户、应用、组件或操作还可以按比例放大或缩小对排序进行操作的线程的数目,而不会丢失工作或不必从头开始排序。
图2是包括数据库服务器208(单独地,数据库服务器208-x)和用户终端204(单独地,用户终端204-x)的系统200的框图。每个终端204-可以执行应用的实例。用户可以与应用交互以访问存储在数据库服务器208-x中的数据。由应用的实例生成的查询和/或命令通过网络210被路由到数据库服务器208-x。例如,用户可以经由在终端204-x上执行的应用来提交查询和/或命令,从而使得数据库服务器208-x对表进行排序。备选地,数据库服务器208-x本身可以发出排序命令,作为对数据表进行较大操作(诸如,索引的生成)的一部分。数据库服务器208执行排序操作并且在排序期间生成元数据,使得排序可以在被暂停或故障之后被恢复。排序结果被发送回请求进程或应用。
系统200中的设备(诸如服务器208和/或终端204)可以均包括一个或多个计算模块。图3A是计算模块300的示例性组件的框图。计算模块300可以包括存储器、处理器320、通信接口350、输入设备330和输出设备340。
存储器360可以包括非易失性存储器304。例如,即使为存储器360供电的电源中断,非易失性存储器304也可以保持数据。非易失性存储器304也可以被称为外部存储器、辅助存储器、次级存储和/或次级存储器。非易失性存储器304可以包括例如磁盘、硬盘驱动器(HDD)、光盘、闪存、固态驱动器(SSD)和/或磁带。
存储器360还可以包括易失性存储器302。例如,在下面讨论的一些实施例中,当为存储器360供电的电源中断时,易失性存储器302丢失数据。易失性存储器302可以比非易失性存储器304更快地读取或写入;与非易失性存储器304相比,处理器320可以更直接地访问易失性存储器302。
存储器360尤其可以存储供处理器320使用的信息和指令(诸如应用和操作系统)和数据(诸如数据表)。图3B是存储在存储器360中的功能组件的框图。如图3A中所示,存储器360可以包括操作系统376、数据库管理系统(DBMS)374、数据库102以及可恢复排序组件380(或“排序组件”或“排序运算器”)。由排序组件执行的排序可以被称为排序操作。
操作系统376可以包括用于管理计算模块300的硬件和软件资源的软件指令。例如,操作系统376可以包括WINDOWS(TM)、Linux、Solaris、OS X、iOS、Android和/或嵌入式操作系统。
应用可以包括例如对数据表进行操作的数据库管理系统374。系统374可以包括可从MICROSOFT(TM)公司获得的SQL SERVER(TM)或AZURE SQL SERVER(TM)。系统374还可以包括其他数据库系统或其他数据存储和/或数据处理产品。
数据库102(也在图1中示出)包括未排序数据集104和经排序数据集106。可恢复排序组件380作用于未排序数据集104,以生成经排序数据集106。如本文所述,可恢复排序组件380可以使用户或其他应用或系统能够暂停和恢复排序操作,同时使丢失的工作最小化(诸如,不必从头开始重新启动排序操作)。可恢复排序组件380还可以使得能够从之前的故障恢复排序操作,同时使丢失的工作最小化(诸如,不必从头开始重新启动排序操作)。可恢复排序组件380还可以使得能够配置在故障或暂停期间丢失的工作的量,以便符合SLA。可恢复排序组件380还可以使得能够按比例放大或缩小线程的数目,线程是操作以对数据集进行排序的线程。
处理器320可以包括解释和执行指令的任何类型的处理器或微处理器(或处理器家族或微处理器家族)。在其他实施例中,处理器320可以包括专用集成电路(ASIC)、现场可编程门阵列(FPGA)等。
通信接口350可以包括用于有线通信的网络接口卡(例如,以太网卡)或用于无线通信的无线网络接口(例如,WiFi)卡。通信接口350可以包括收发器(接收器和/或发射器),其使得计算模块300能够与其他设备或系统通信。如上所述,接口350允许设备通过网络210与其他设备通信。网络210可以包括一个或多个分组交换网络,诸如基于互联网协议(IP)的网络、局域网(LAN)和/或广域网(WAN)。
输入设备330可以允许用户向计算模块300中输入信息。例如,用户终端204-x可以包括输入设备330,诸如键盘、鼠标、笔、触摸屏显示器、麦克风和/或相机。系统200中的一些设备(诸如,数据库服务器208-x)可以是“无头的”,并且可以不包括输入设备330(诸如键盘)。
输出设备340可以向用户输出信息。例如,用户终端204可以包括诸如显示器、打印机、扬声器等的输出设备340。诸如数据库服务器108的无头设备可以不具有输出设备340。
输入设备330和输出设备340可以允许用户激活特定服务或应用(诸如,网络浏览器或应用)并与之交互,以与DBMS 374和/或可恢复排序组件380对接。输入设备330和输出设备340可以允许用户接收和查看选项的菜单并且从菜单选项选择。菜单可以允许用户选择与由计算模块300执行的应用相关联的各种功能或服务。
计算模块300可以包括其他有助于接收、传送和/或处理数据的组件(未示出)。此外,计算模块300中的组件的其他配置是可能的。
响应于处理器320执行存储在诸如存储器360的非瞬态计算机可读介质中的软件指令,计算模块300可以执行本文描述的操作。计算机可读介质可以包括有形和/或物理存储器设备。可以从另一计算机可读介质(诸如非易失性存储器304)或经由通信接口350从另一个设备,将软件指令读取到存储器360(诸如,易失性存储器302)中。存储在存储器360中的软件指令可以使得处理器320执行本文描述的过程。
如关于图1所讨论的,系统374可以输入未排序数据集104以生成经排序数据集106。图4A是具有许多行的未排序数据集402的框图。尽管数据集402的部分可以被存储在易失性存储器302中,但是数据集402可以大部分存储在非易失性存储器304中。在下面描述的示例中,数据集402足够大以至于将整个数据集402加载到易失性存储器302中是不可行的(尽管本文描述的实施例不必以该方式被限制)。为了便于排序,可以按照块将数据集402从非易失性存储器304读取到易失性存储器302。如图4A中所示,数据集402在逻辑上被划分为块404-1至404-M(单独地,“块404-x”,共同地,“块404”)。块404的尺寸使得例如可以将块404-x加载到易失性存储器302中以进行排序。每个块404可以具有N个记录的长度。在一个实施例中,在将数据集402从非易失性存储器304读取到易失性存储器302中时,可以确定每个块404-1的开始和长度。在该示例中,与数据集402一样,块404的行也未被排序。
在一个实施例中,来自未排序数据集402(也被称为“表”)的未排序块404-x被读取到易失性存储器302中,并且被排序以生成对应的经排序块,然后被写入到非易失性存储器304作为边表的一部分。图4B是在一个实施例中的具有多个经排序块414的这种边表412的框图。在该示例中,经排序块414-1可以对应于未排序块404-1(例如,块414-1中的数据与块404-1相同,但块414-1中的数据是经排序的)。同样,经排序块414-2可以对应于未排序块404-2等。然而,这种严格的对应关系不是必需的。像数据集402一样,在该示例中,边表412也可能太大而无法被加载到易失性存储器302中。因此,边表412也可以在逻辑上被划分为块414-1至414-M(单独地,“块414-x”,共同地,“块414”)。虽然每个块414-x可以是经排序的(在块内),但是边表412本身可以是不经排序的。然而,边表412(具有经排序块414)的创建可以被称为用于生成完全经排序数据集(诸如,经排序数据集106)的排序操作的“输入”或“扫描”阶段。
可以一次一个块地创建边表412,或者一次一个“排序运行”地创建边表412。图4C、图4D和图4E示出了处于不同状态的边表412,其具有不同数目的经排序块414。在图4C中,边表412-1仅包括一个经排序块414-1。在图4D中,边表412-2包括两个经排序块(块414-1和块414-2)。在图4E中,边表412-3包括三个经排序块414。如下面更详细地描述的,经排序块414可以被合并以创建完全经排序数据集(诸如从未排序数据集104生成的经排序数据集106)。排序操作的后一个阶段可以被称为用于生成完全经排序数据集(诸如,经排序数据集106)的排序操作的“输出”或“合并”阶段。
在输入或扫描阶段期间,排序操作可以存储(或保持)元数据(或状态信息),以便能够恢复暂停或故障的排序。例如,排序操作可以将元数据存储或保持在非易失性存储器304中。图5A是在一个实施例中与排序操作的输入阶段相关联的、以促进恢复排序的能力的扫描元数据502的框图。扫描元数据502使得能够保持与排序操作的输入或扫描阶段有关的排序操作的状态。如图5A中所示,扫描元数据502包括线程ID字段512、SLA字段514、第一行字段516、最后一行字段518、最后提交行字段520、状态字段522、输入数据集字段524以及目标边表字段526。在一个实施例中,扫描元数据502中所示的字段是一个示例。在其他实施例中,可以使用附加字段、更少的字段或字段的不同布置。在另一个实施例中,例如,SLA字段514被省略,如下面更详细描述的。
线程ID字段512标识与扫描元数据502相关联的线程。在一些实施例中,可以使用一个以上的计算线程对数据集402进行排序。在这种情况下,数据集402可以包括块404的多个组,块的每个组被标识以供不同的线程进行排序。例如,一个线程可以对块404-1至404-10进行排序,并且第二线程可以对块404-11至404-M进行排序。处理数据集402的每个线程可以与它自己的扫描元数据502相关联。可以使用附加的元数据来跟踪多个线程。
第一行字段516标识数据集402中的第一行,以供在线程ID字段512中标识的线程来排序。最后一行字段518标识数据集402中的最后一行,以供在线程ID字段512中标识的线程来排序。如图5B中所示,如果只有一个线程对数据集402进行排序,则第一行字段516指向数据集402中的第一行,并且最后一行字段518指向数据集402中的最后一行。
SLA字段514可以指示要被从非易失性存储器304加载到易失性存储器302中的块404-x的最大尺寸,以供对应的线程开始排序。SLA字段514可以例如指定行的数目。在下面的示例中,假设块尺寸为N行。可以将最大块尺寸定义为较小的最大尺寸,而不是将最大块尺寸定义为尽可能大以适合易失性存储器。例如,可以基于在排序操作被暂停或故障的情况下可能丢失的工作的量,来确定最大块尺寸。即,仅仅因为易失性存储器302非常大,并不一定意味着最大块尺寸也同样大。相反,可以选择最大块尺寸以在暂停(或故障)的情况下使丢失的工作最小化,同时仍然允许排序操作的效率。可以选择块的最大尺寸以符合SLA,SLA定义了当排序故障或被暂停时可能丢失的工作的量(例如,按时间测量)。如上所述,SLA字段514可以在一个实施例中被省略,并且最大块尺寸可以在从非易失性存储器304读取未排序数据集402时被确定。
状态字段522可以指示:在线程ID字段512中标识的线程是否已经对第一行和最后一行(分别在第一行字段516和最后一行字段520中被标识)之间的所有块404进行了排序,以及是否已经将经排序块414提交给了边表412。状态字段522可以包括例如布尔值,其中TRUE指示完成,并且FALSE指示未完成。在另一个实施例中,状态字段522还可以指定到目前为止由线程ID字段522中标识的线程完成的排序的级(stage)。例如,状态字段522可以指定块404的排序已经完成(并且被提交)(输入阶段),并且正在进行合并(输出阶段)。
最后提交行字段520存储对数据集402中的块404进行排序的相应线程的进度(状态,诸如行)。在一个实施例中,最后提交行字段520标识已经被读入、经排序并且被提交给边表412的数据集402中的最后一个块的最后一行(假设数据集402正在被顺序地读取)。因此,可以利用经排序块414-x到边表412的每个提交来更新最后提交行字段520。如果所有未排序块404已经被排序并且被提交给边表412,则最后提交行字段520应当指示最后一个块404-M的最后一行(或最后一行字段518)。然而,如果排序被中断,则最后提交行字段520可以用于恢复数据集402的排序,从以最后提交的行结束的块404-x之后的块404-x开始。在其他实施例中,其他信息可以被存储在扫描元数据502中,以指示在对数据集402中的块404进行排序时的相应线程的进度的状态(诸如,当线程没有顺序地对块404进行排序时,可以指定所提交的块)。
输入数据集字段524标识要排序的数据集,诸如未排序数据集402。目标边表字段526标识要向其写入经排序块的边表,诸如边表412。因为多个边表可以被使用,所以目标边表字段526帮助标识合适的一个以进行写入。例如,由于多个线程正在运行或由于合并的多个水平(诸如中间合并),多个边表可以被使用。这些字段可以用于对在边表412上操作的未排序数据集402上的排序进行恢复。
如上所述,在一个实施例中,扫描元数据502中所示的字段是一个示例。在其他实施例中,可以使用附加字段、更少的字段或字段的不同布置。例如,块尺寸字段454可以被省略;和/或如果只有一个线程正在处理未排序数据集402,则可以省略线程ID字段512。
当可恢复排序组件380对边表412进行写入时,它跟踪经排序块(诸如每个块的开始、长度和/或结束行)。图5C是与边表412的每个块相关联的元数据550的框图。如图5C中所示,元数据550包括块开始行字段552、块长度字段554和目标边表字段556。在一个实施例中,元数据550中示出的字段是一个示例。在其他实施例中,可以使用附加的字段、更少的字段或字段的不同布置。
块开始行字段552标识边表412中的对应的数据的块中的第一行。块长度字段554标识边表412中的对应的数据的块的长度。如上所述,边表412可以一次一个块地被创建,或一次一个“排序运行”地被创建。如果边表412包括一个块(参见图4C),则元数据可以包括块开始行字段552和块长度字段554的列表,针对每个块414-x的一对字段。
输出边表字段556标识要向其写入经排序块的边表,诸如类似于边表412的另一个边表。因为多个边表可以被使用(用于在相同数据集上操作的多个线程或合并的多个水平),输出边表556有助于标识合适的一个以进行写入。在一个实施例中,输出边表556可以用于指定输出不是到另一边表,而是到请求的用户、操作或组件,并且可能不需要针对输出边表的元数据550的新集。输出到请求的用户、操作或组件可以是排序操作的一部分,被称为“最终合并”。
图6是在一个实施例中用于执行可恢复排序的示例性过程600的流程图。例如,过程600可以由在处理器320中的数据库管理系统374中运行的可恢复排序组件380执行。过程600可以仅仅是执行以对未排序数据集402进行排序的一个线程。在该示例中,可恢复排序组件380可以启动过程600,因为它从数据库管理系统374接收排序命令(动作601)。
过程600可以继续进行数据的块的最大尺寸的确定(动作602)。在一个实施方式中,过程600读取扫描元数据502(SLA字段514)以确定最大块尺寸为N行。在另一个实施方式中,过程600基于其他因素确定块的最大尺寸。块404的尺寸越小,在故障的情况下丢失的工作越少。另一方面,小的块尺寸可以导致附加的(多于一个)合并步骤,并且因此导致易失性和非易失性存储器之间的附加输入/输出。例如,过程600可以确定未排序数据集402可以被划分成的未排序块404的最大数目,同时仍然避免中间合并的需要。换句话说,过程600可以确定未排序块404中的最小行数,而不会引起附加的中间合并。如此,过程600可以避免与额外的合并相关联的易失性302/非易失性存储器304的输入/输出,同时减少在排序故障的情况下丢失的工作。
在一个实施例中,过程600确定未排序块404-x的最小尺寸,同时避免附加的(第二)合并。如果所确定的块的尺寸太大(与SLA相比,在发生故障的情况下会造成太大的工作损失),则过程600确定未排序块404-x的最小尺寸,具有一个附加(第二)合并,同时避免第三合并。如果所确定的块的尺寸仍然太大(与SLA相比,在发生故障的情况下会造成太大的工作损失),则过程600确定未排序块404-x的最小尺寸,具有两个附加(第二和第三)合并排序,同时避免第四合并排序。可以重复这些用于确定块尺寸的步骤,直到确定了在故障(或暂停)的情况下满足SLA的块尺寸为止。例如,可以通过读取扫描元数据502中的SLA字段514来确定SLA。
过程600继续从未排序数据集402读取数据(动作604)。例如,可以将未排序数据集402(被示为块404-x)从非易失性存储器304读取到易失性存储器302。过程600继续从数据集402读取数据(动作604),直到块的尺寸达到合适的最大值为止(动作606:是)。例如,合适的最大值可以是最大块尺寸(在动作602中确定)。备选地,如果最大块尺寸(在动作602处确定)大于可用的易失性存储器302,则可以缩短块404-x的读取,从而有效地使块404-x比最大块尺寸所指定的小(在动作602中)。
过程600继续进行未排序块404-x的排序以生成经排序块414-x(动作610)。可以使用任何数目的排序算法来对易失性存储器302中的块404-x进行排序,诸如快速排序或合并排序。当块404-x的排序完成时,过程600可以将经排序块414-x提交给边表412(动作612)。更一般地,经排序块414-x被保持到存储器,诸如被写入到非易失性存储器304(动作612)。提交可以包括在SQL中发出COMMIT命令和/或将经排序块414-x写入到非易失性存储器。如此,排序操作(经排序的第一部分或块)的中间结果被保持(诸如,到非易失性存储器304)。
连同将经排序块414-x提交(动作612)给边表412,排序的状态被保持(动作614)(诸如,通过更新存储在扫描元数据502和元数据550中的数据)(动作614)。保持排序的状态标识排序操作的已经被成功执行(并且被保持)的部分。例如,如果一个块已经被排序并且被提交给边表412(参见图4C),则最后提交行字段520可以被更新以指向未排序块404-1的最后一行(图5B中的LRC1)。如果两个块已经被排序并且被提交给边表412(参见图4D),则最后提交行字段520可以被更新以指向未排序块404-2的最后一行(图5B中的LRC2)。此外,可以将记录添加到元数据550。在该示例中,排序操作添加针对被提交给边表412的经排序块414-x的第一行(在块第一行字段552中)的值,以及被提交给边表412的经排序块414-x的长度(在块长度字段554中)。如果元数据550尚未退出,则创建元数据550。
如果整个未排序数据集402已经(以块)被读取并且被排序(动作616:是),则排序的状态可以被保持(动作618)。例如,状态字段522可以被更新以指示所有未排序数据集402已经以块414被读取、排序并且被提交给边表412,并且指示排序操作已经行进到合并或输出阶段(动作620)。在下面关于图8更详细地讨论可恢复排序操作的合并部分。
在一些情况下,在完成逐块将整个未排序数据集402读取到易失性存储器302中(动作616:否)以进行排序之前,经排序块414可以被合并。如图6中所示,如果经排序块414的数目已经达到阈值(动作622:是),则过程600可以行进以合并经排序块414中的一些经排序块(动作624)。在下面关于图8更详细地讨论可恢复排序操作的合并部分。由于并非所有未排序数据集402已经被读取和被排序(动作616:否),因此在合并(动作624)之后,过程600将继续读取未排序数据集402(返回到动作604)。
如果未排序数据集402中的数据仍待被读取到易失性存储器302中(动作616:否),则过程600可以继续读取未排序数据集402(动作604),对块进行排序和提交(动作610和612),并且保持状态(动作614)。另一方面,如果所有块都已经被排序,则过程600可以继续进行最终合并(动作626)。
处理600有效地将排序操作划分为多个部分(诸如,要被排序的多个块),对每个部分执行排序操作(诸如,对第一部分或块进行排序),保持该部分的排序(诸如,经排序的第一部分或块)的结果(中间结果),并且保持排序操作的状态,该状态标识排序操作的已经被执行的部分。如下面更详细地描述的,这可以使排序操作能够在故障或暂停之后恢复。
过程600可以被描述为将未排序数据集402的多个未排序块404从非易失性存储器304读取到易失性存储器302中;对多个未排序块404中的每个未排序块进行排序以生成对应的多个经排序块414;将对应的多个经排序块414保持到非易失性存储器304;和/或保持元数据(第一元数据)(诸如,指向未排序数据集402的指针),该元数据指示与被保持的经排序块414相对应的一部分。将对应的多个经排序块保持到非易失性存储器可以包括将对应的多个经排序块提交给边表。读取多个未排序块可以包括基于服务水平协议读取未排序块到最大块尺寸。
如果排序操作被暂停(诸如,在故障中),则可以基于被保持的状态(诸如,扫描元数据502和/或元数据550)来恢复操作。下面关于图9更详细地讨论恢复排序操作。
图7A是一个实施例中的用于合并的易失性存储器302中的缓冲器的框图。如图7A中所示,易失性存储器302可以具有输入缓冲器706(单独地,输入缓冲器706-x)和输出缓冲器710。每个输入缓冲器与特定尺寸(例如,以行指定)相关联。输出缓冲器710也与尺寸(例如,以行指定)相关联。在一些实施方式中,输入缓冲器706的尺寸和输出缓冲器710的尺寸小于块414的尺寸。经排序块414被读取并且被存储在输入缓冲器706中。每个输入缓冲器706-x与块的第一行(如在对应块的块开始行字段552中被标识的)以及块长度(如在对应块的块长度字段554中被标识的)相关联。在不同的实施方式中,每个输入缓冲器706-x与合并的最后一行的指针(而不是块长度指针)相关联。
在图7A的示例中,易失性存储器302具有P个输入缓冲器和一个输出缓冲器710。输入缓冲器706-1存储来自经排序块414-1的行;输入缓冲器706-2存储来自经排序块414-2的行;等等。排序组件可以重复地从输入缓冲器706选择行(诸如,具有最小值的行),并且将该行插入到输出缓冲器710中。每次将行从输入缓冲器706-x复制到输出缓冲器710时,对应的开始行(在块开始行字段552中)可以被增加,并且对应的块长度(块长度字段554)被减少以标记合并排序的进度。图7B是示出已经被合并成新的(或输出)边表754的边表412(输入边表752)的框图。如图7B中所示,边表412(或输入边表752)的块414-1、414-2和414-3已经被合并到输出边表754的块758-1中。边表412(或输入边表752)的块414-4至414-M已经被合并到输出边表754的块758-Q中。块758被内部排序,但是边表754本身可能未被排序。像边表412一样,边表754可以与定义块758的元数据(诸如,每个块的块开始行字段552中的开始行和块长度字段554中的长度)相关联,并且边表754可以由输出边表字段556标识。
图8是一个实施例中的用于执行合并排序的示例性过程800的流程图。关于图7B的输入边表752和输出边表754描述过程800。例如,过程800可以由在处理器320中的数据库管理系统374中运行的可恢复排序组件380执行。过程800可以仅仅是执行以对未排序数据集402进行排序的一个线程。过程800可以输入边表并且输出边表(在输出边表字段556中定义)。如果过程800正在执行“最终”(最后)合并,则过程800可以输出到请求的用户、进程、组件或运算器(并且输出边表字段556可以如此指示)。如果过程800正在执行其第一合并,则过程800可以创建输出边表(如由输出边表字段556所标识的)。在下面的示例中,边表412(输入边表752)被合并以形成输出边表754。
过程800可以从确定输入缓冲器706的数目和尺寸开始(动作802)。确定输入缓冲器706的数目和尺寸可以动态地出现(诸如在合并的开始、重启或恢复时)。输入缓冲器706的数目可以与用于确定何时开始合并的阈值相同(图6中的动作622)。在图7A的示例中,有P个输入缓冲器。在一个实施例中,输入缓冲器706-x的尺寸是基于:在将一行从输入缓冲器706移动到输出缓冲器710之后,不引起等待时间(来自输入/输出)来重新填充该缓冲器的情况下,该缓冲器可以具有的最小可能尺寸。同样,在该实施例中,缓冲器的数目是基于易失性存储器302中可能的缓冲器706-x的最大数目,该数目是基于缓冲器706-x的尺寸。例如,缓冲器的数目可以是基于可用的存储器的量和输入缓冲器706的尺寸。此外,可以选择易失性存储器302中的输入缓冲器706-x的尺寸和数目以避免缓冲器到非易失性存储器306的分页。在一个实施例中,输入缓冲器706的数目和尺寸可以由用户、进程或组件来确定,以满足关于在排序操作故障或暂停的情况下丢失的工作的SLA(诸如,在SLA字段514中定义的)。
过程800还可以确定输出缓冲器的尺寸(动作804)。在一个实施例中,输出缓冲器710的尺寸可以与输入缓冲器706的尺寸相同。在另一个实施例中,输出缓冲器710的尺寸可以由用户、进程或组件确定以满足关于在排序操作故障或暂停的情况下丢失的工作的SLA(诸如,在SLA字段514中定义的)。如果输出缓冲器710在满时被清除(flush)到非易失性存储器304,则在排序操作故障或被暂停的情况下,较大的输出缓冲器710可能导致丢失的工作更多。在排序操作故障或被暂停的情况下,较小的输出缓冲器710可以导致丢失的工作较少。然而,如果在输出缓冲器710被清除时排序的状态(或合并)被保持,则较小的输出缓冲器710在排序期间可能引起附加的延迟(输入/输出)。
过程800可以继续将数目(P)个经排序块414读取到易失性存储器302中(动作806)的对应的输入缓冲器706(动作806)中(诸如,从非易失性存储器304)。因为输入缓冲器可能小于经排序块414的尺寸,所以块414的整体可能不适合输入缓冲器706。
过程800继续将行中的一个行从输入缓冲器706-x(并且因此将对应的经排序块414-x)放置到输出缓冲器710中(动作808)。当行被放置在输出缓冲器710中时,状态被更新(动作810)。在该示例中,更新状态可以包括:使块开始行字段522中的对应的值递增,并且使块长度字段554中的值(针对对应的块)递减。更新的状态不一定被保持(在该实施例中的此时)。只要输出缓冲器710不是满的(动作812:否)并且输入缓冲器不为空(动作814:否),就将来自输入缓冲器706的行放置到输出缓冲器710中并且更新状态(动作808和810)继续。如果输入缓冲器706-x为空(动作814:是),但并非所有块都已经被合并(动作816:否),则可以将更多的行加载到输入缓冲器706-x中的一个输入缓冲器中(动作806)。
如果输出缓冲器710是满的(动作812:是),则输出缓冲器710的内容可以被清除并且被提交给输出边表(动作818)。例如,如图7B中所示,块758-1包括三个缓冲器清除。输出边表754可以由与输入边表752相关联的元数据550的输出边表字段556中的值来标识。当缓冲器被清除时(动作818),状态可以被保持(动作820)。在该情况下,保持状态可以包括保持与输入边表752和输出边表754两者相关联的元数据550。保持输入边表752的元数据可以包括针对输入边表的块写入块开始行字段522和块长度字段554的状态。因为这些字段522和554的状态之前被更新(动作810),所以保持这些字段会存储输入边表的状态。保持输出边表754的元数据550可以包括增加块长度字段554的长度(从块长(CL)2到块长3,如图7B中所示)或利用块第一行字段552和块长度字段554两者为新的块创建元数据550的新条目。如上所述,输出边表可以由输出边表字段556标识。过程800的第一实例可以形成输出边表754的新排序块758-1。来自过程800(诸如,用于对块414-4至块414-M进行排序)的后续实例的块可以被附到之前经排序块758-1的结果(如在图7B中被示为经排序块758-Q)。
像过程600一样,过程800有效地将排序操作划分为多个部分(诸如,利用块的部分来填充输入缓冲器),对每个部分执行排序操作(诸如,填充输出缓冲器),保持该部分的排序的结果(清除输出缓冲器),以及保持排序操作的状态,该状态标识排序操作的已经被执行的部分。如下面更详细地描述的,这可以允许排序操作在故障或暂停之后恢复。
过程800可以被描述为:将经排序块414读取到输入缓冲器706中;将经排序块合并到输出缓冲器710中;将输出缓冲器710中的数据保持到非易失性存储器304(诸如,当输出缓冲器710是满的时);和/或保持每个经排序块的元数据(第二元数据)(诸如指针),该元数据指示对应的经排序块的一部分,该一部分对应于输出缓冲器中的被保持的数据。将对应的多个经排序块保持到非易失性存储器可以包括将对应的多个经排序块提交给边表。将输出缓冲器中的数据保持到非易失性存储器可以包括将输出缓冲器中的数据提交给边表。
如果排序操作被暂停(诸如,在故障中),则可以基于诸如扫描元数据502和/或元数据550的被保持的元数据来恢复该操作。将在下面关于图9更详细地讨论恢复排序操作。
图9是用于恢复已经被暂停(或故障)的排序操作的示例性过程900的流程图。例如,过程900可以由在处理器320中的数据库管理系统374中运行的可恢复排序组件380来执行。过程900可以仅仅是执行以对未排序数据集402进行排序的一个线程。在该示例中,可恢复排序组件380可以启动过程900,因为它检测到故障(动作902)。备选地,排序组件可以启动过程900,因为它接收到暂停排序命令(动作904)。在已经接收到暂停排序命令(动作904)的情况下,可以丢弃非持久性数据(诸如,易失性存储器302中的数据)(与遇到故障相似的结果)(动作906),并且当接收到恢复排序命令时恢复排序(动作908)。
为了恢复排序,通过例如读取状态元数据(包括扫描元数据502和/或元数据550)来确定排序的状态(已经故障或暂停)(动作910)。在以上示例中,即使排序运算器尚未开始和/或完成合并(诸如过程800),扫描元数据502也应当存在。可以通过读取元数据502中的状态字段522来确定排序(扫描)的状态。
如果扫描尚未完成(动作912:否),则过程900可以针对在未排序数据集上操作的每个线程来确定最后提交的行(动作914)。例如,针对由输入数据集字段524定义的数据集,过程900可以针对每个线程(在线程ID字段512中定义的)读取最后提交行字段520。过程900还可以确定之前被写入的任何边表412的状态(动作916)。例如,过程900可以读取边表(在目标边表字段526中定义的)以及指定经排序块中的每个经排序块的相关联的元数据550。然后,过程900可以通过基于元数据502和元数据550恢复过程600(扫描)(动作918)——利用输入数据集(由输入数据集字段524定义,从最后提交的行开始),并且通过继续输出到边表ID字段526中被标识的边表,来重新启动故障(或被暂停)的扫描(诸如,针对每个被标识的线程)。如上所述,过程600包括读取输入数据集402以及输出到边表412。
如果扫描完成(动作912:是),则如果尚未完成合并(动作920:否),则过程900可以恢复该合并。可以通过读取元数据502中的状态字段522来确定排序的状态(诸如,扫描或合并阶段)。为了恢复合并,可以确定任何输入边表的状态(动作922)。例如,可以通过针对在线程ID字段512中被标识的每个线程,读取在目标边表字段526中被标识的边表的块开始行字段552和块长度字段554,来确定输入边表的状态。过程900可以继续确定任何输出边表的状态(动作924)(如果存在的话)。可以通过针对在输出边表字段556中被标识的边表,读取块开始行字段552和块长度字段554来确定输出边表的状态。
基于在元数据502和元数据550中被标识的状态,过程900可以继续进行过程800的恢复(动作926)。
当排序操作被恢复时(诸如,通过过程900),可以从之前故障(或被暂停)的排序中按比例放大或缩小恢复排序的线程的数目。例如,如果一个线程执行了被暂停的排序,那么两个线程可以恢复该排序。同样,如果三个线程执行了被暂停的排序,则两个线程可以恢复排序。因此,上面公开的实施例使用户能够放大执行排序的线程的数目(诸如,通过暂停和恢复排序)或缩小执行排序的线程的数目(也通过暂停和恢复排序)。换句话说,排序组件可以在排序操作被暂停之后利用执行排序操作的不同数目的计算线程,恢复排序操作。因此,过程900示出了在排序操作被暂停之后基于排序操作的被保持的状态,恢复排序操作。
在一个实施例中,可以基于服务水平协议(SLA)确定最大块尺寸。例如,SLA可以指定排序(如果故障或暂停)不会损失超过5分钟的排序时间(最大排序时间)。可以基于最大排序时间来确定最大块尺寸。
当被实施在数据库中时,上述可恢复排序可以使能比其他方式更短的事务日志。因此,实施例对于实施最大事务日志长度的数据库管理系统(DBMS)的用户可能是有利的。
上述实施例可以与2014年10月28日提交的题目为“Online Schema and DataTransformations”的美国专利申请号14/526118中公开的实施例结合使用。上述实施例还可以与在2017年05月05日提交的题目为“Resumable and Online SchemaTransformation”的美国专利申请号15/588323中公开的实施例结合使用。上述实施例也可以与2016年10月28日提交的题目为“Resumable and Online Schema Transformation”的美国专利申请号62/414346中公开的实施例结合使用。例如,在这些申请中讨论的数据集的任何排序都可以结合本文公开的技术。
在本申请的描述中使用的任何要素、动作或指令均不应当被解释为对本发明是关键或必要的,除非明确地如此描述。如本文所使用的,冠词“一”和“该”以及术语“...中的一个”旨在包括一个或多个项。此外,短语“基于”意指“至少部分地基于”,除非另有明确说明。另外,“示例性”意指“示例”。
在前面的说明书中,参考附图描述了各种优选实施例。然而,将明显的是,在不脱离如所附权利要求中阐述的本发明的较宽范围的情况下,可以对其进行各种修改和改变,并且可以实施其他实施例。因此,说明书和附图应当被认为是说明性而非限制性的。
Claims (18)
1.一种计算机系统,包括:
处理器;以及
计算机可读介质,在其上存储有指令,所述指令是由所述处理器可执行的,以将所述计算机系统配置为执行以下:
接收数据库命令,以执行对未排序数据集的排序操作,其中所述未排序数据集的至少一部分被存储在非易失性存储器中;
确定用于从所述非易失性存储器读取所述未排序数据集的部分的最大块尺寸;
将所述未排序数据集的第一块从所述非易失性存储器读取到易失性存储器,其中所述第一块具有小于或等于所述最大块尺寸的尺寸;
对所述第一块进行排序,以生成第一经排序块;
将所述第一经排序块保持到所述非易失性存储器;
在所述非易失性存储器中保持所述排序操作的状态,所述排序操作的所述状态包括第一信息和第二信息,所述第一信息指示对所述未排序数据集中的块进行排序的进展,所述第二信息标识经排序块应当被写入的所述非易失性存储器中的至少一个位置;
在保持所述排序操作的所述状态后,暂停所述排序操作;以及
在所述排序操作被暂停后,基于所述排序操作的所述状态中的所述第一信息和所述第二信息,恢复所述排序操作。
2.根据权利要求1所述的计算机系统,其中保持所述排序操作的所述状态包括保持第一元数据,所述第一元数据标识所述未排序数据集的所述一部分,所述未排序数据集的所述一部分对应于所述第一经排序块。
3.根据权利要求2所述的计算机系统,还包括附加指令,所述附加指令是由所述处理器可执行的,以:
当将所述第一经排序块保持到所述非易失性存储器时,将所述第一经排序块提交给边表。
4.根据权利要求2所述的计算机系统,其中所述最大块尺寸基于服务水平协议。
5.根据权利要求4所述的计算机系统,还包括附加指令,所述附加指令是由所述处理器可执行的,以:
在所述排序操作被暂停后,基于所保持的所述第一元数据,恢复所述排序操作。
6.根据权利要求2所述的计算机系统,其中:
对所述第一块进行排序以生成所述第一经排序块包括:将所述第一经排序块读取到一个或多个输入缓冲器中,将所述第一经排序块读取到输出缓冲器中,以及当所述输出缓冲器是满的时,将所述输出缓冲器中的数据保持到非易失性存储器;并且
保持所述排序操作的所述状态包括:保持第二元数据,所述第二元数据标识所述第一经排序块的一部分,所述第一经排序块的所述一部分对应于所述输出缓冲器中的所保持的所述数据。
7.根据权利要求6所述的计算机系统,还包括附加指令,所述附加指令是由所述处理器可执行的,以:
当将所述第一经排序块保持到所述非易失性存储器时,将所述第一经排序块提交给边表;以及
当将所述输出缓冲器中的所述数据保持到所述非易失性存储器时,将所述输出缓冲器中的所述数据提交给所述边表。
8.根据权利要求7所述的计算机系统,还包括附加指令,所述附加指令是由所述处理器可执行的,以:
在所述排序操作被暂停后,基于所保持的所述第二元数据,恢复所述排序操作。
9.根据权利要求8所述的计算机系统,还包括附加指令,所述附加指令是由所述处理器可执行的,以:
在所述排序操作被暂停后,利用执行所述排序操作的不同数目的计算线程,恢复所述排序操作。
10.一种计算机方法,包括:
接收数据库命令,以对未排序数据集进行排序;
至少部分地基于减少失败事件中的信息损失并且减少中间合并,确定最大块尺寸;
基于所述最大块尺寸,将用于对所述未排序数据集进行排序的排序操作划分为多个部分;
执行所述排序操作的第一部分;
保持来自所述排序操作的所述第一部分的中间结果;以及
保持所述排序操作的状态,所述排序操作的所述状态包括第一信息和第二信息,所述第一信息指示对所述未排序数据集中的块进行排序的进展,所述第二信息标识经排序块应当被写入的非易失性存储器中的至少一个位置;
在保持所述排序操作的所述状态后,暂停所述排序操作;以及
在所述排序操作被暂停后,基于所述排序操作的所述状态中的所述第一信息和所述第二信息,恢复所述排序操作。
11.根据权利要求10所述的计算机方法,其中:
执行所述排序操作的所述第一部分包括:将所述未排序数据集的多个未排序块从非易失性存储器读取到易失性存储器中,对所述多个未排序块中的每个未排序块进行排序,以生成对应的多个经排序块,以及将所述对应的多个经排序块保持到所述非易失性存储器;并且
保持所述排序操作的所述状态包括:保持第一元数据,所述第一元数据标识所述未排序数据集的一部分,所述未排序数据集的所述一部分对应于所保持的所述对应的多个经排序块。
12.根据权利要求11所述的计算机方法,其中将所述对应的多个经排序块保持到所述非易失性存储器包括将所述对应的多个经排序块提交给边表。
13.根据权利要求11所述的计算机方法,其中读取所述多个未排序块包括基于服务水平协议,读取所述未排序块到最大块尺寸。
14.根据权利要求13所述的计算机方法,还包括在所述排序操作被暂停后,基于所保持的所述第一元数据,恢复所述排序操作。
15.根据权利要求11所述的计算机方法,其中:
执行所述排序操作的所述第一部分包括:将所述对应的多个经排序块读取到多个输入缓冲器中,将所述对应的多个经排序块合并到输出缓冲器中,以及当所述输出缓冲器是满的时,将所述输出缓冲器中的数据保持到所述非易失性存储器;并且
保持所述排序操作的所述状态包括保持第二元数据,所述第二元数据标识经排序块的一部分,所述经排序块的所述一部分对应于所述输出缓冲器中的所保持的所述数据。
16.根据权利要求15所述的计算机方法,其中:
将所述对应的多个经排序块保持到所述非易失性存储器包括将所述对应的多个经排序块提交给边表,并且
将所述输出缓冲器中的所述数据保持到所述非易失性存储器包括将所述输出缓冲器中的所述数据提交给所述边表。
17.根据权利要求16所述的计算机方法,还包括在所述排序操作被暂停后,基于所保持的所述第二元数据,恢复所述排序操作。
18.根据权利要求17所述的计算机方法,还包括在所述排序操作被暂停后,利用执行所述排序操作的不同数目的计算线程,恢复所述排序操作。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/953,000 US10871945B2 (en) | 2018-04-13 | 2018-04-13 | Resumable merge sort |
US15/953,000 | 2018-04-13 | ||
PCT/US2019/024447 WO2019199464A1 (en) | 2018-04-13 | 2019-03-28 | Resumable merge sort |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111971667A CN111971667A (zh) | 2020-11-20 |
CN111971667B true CN111971667B (zh) | 2024-05-24 |
Family
ID=66290536
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980025244.6A Active CN111971667B (zh) | 2018-04-13 | 2019-03-28 | 可恢复的合并排序 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10871945B2 (zh) |
EP (1) | EP3776252A1 (zh) |
CN (1) | CN111971667B (zh) |
WO (1) | WO2019199464A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10963187B2 (en) * | 2019-06-11 | 2021-03-30 | Cirrus Logic, Inc. | Discrete exchange and update of multiple consistent subset views of an evolving data store |
US11625177B2 (en) * | 2020-11-20 | 2023-04-11 | Micron Technology, Inc. | Combination scan management for block families of a memory device |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5084815A (en) * | 1986-05-14 | 1992-01-28 | At&T Bell Laboratories | Sorting and merging of files in a multiprocessor |
US5870563A (en) * | 1992-09-19 | 1999-02-09 | International Business Machines Corporation | Method and apparatus for optimizing message transmission |
CN102918496A (zh) * | 2010-04-23 | 2013-02-06 | 微软公司 | 对电子表格中的数据项的多线程排序 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5924093A (en) * | 1997-05-29 | 1999-07-13 | Ncr Corporation | Virtual processor buffered merge sort for parallel applications |
US7904434B2 (en) * | 2007-09-14 | 2011-03-08 | Oracle International Corporation | Framework for handling business transactions |
EP2883385B1 (en) * | 2012-09-07 | 2020-01-08 | Dejero Labs Inc. | Method for characterization and optimization of multiple simultaneous real-time data connections |
US11275760B2 (en) | 2014-10-28 | 2022-03-15 | Microsoft Technology Licensing, Llc | Online schema and data transformations |
WO2016098086A1 (en) * | 2014-12-19 | 2016-06-23 | Telefonaktiebolaget Lm Ericsson (Publ) | Negotiation of message chunk size for message session relay protocol session |
US10769134B2 (en) | 2016-10-28 | 2020-09-08 | Microsoft Technology Licensing, Llc | Resumable and online schema transformations |
-
2018
- 2018-04-13 US US15/953,000 patent/US10871945B2/en active Active
-
2019
- 2019-03-28 WO PCT/US2019/024447 patent/WO2019199464A1/en active Application Filing
- 2019-03-28 EP EP19719997.9A patent/EP3776252A1/en active Pending
- 2019-03-28 CN CN201980025244.6A patent/CN111971667B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5084815A (en) * | 1986-05-14 | 1992-01-28 | At&T Bell Laboratories | Sorting and merging of files in a multiprocessor |
US5870563A (en) * | 1992-09-19 | 1999-02-09 | International Business Machines Corporation | Method and apparatus for optimizing message transmission |
CN102918496A (zh) * | 2010-04-23 | 2013-02-06 | 微软公司 | 对电子表格中的数据项的多线程排序 |
Non-Patent Citations (1)
Title |
---|
Query Suspend and Resume;Badrish Chandramouli 等;SIGMOD;557-568 * |
Also Published As
Publication number | Publication date |
---|---|
WO2019199464A1 (en) | 2019-10-17 |
US20190317727A1 (en) | 2019-10-17 |
EP3776252A1 (en) | 2021-02-17 |
US10871945B2 (en) | 2020-12-22 |
CN111971667A (zh) | 2020-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11010240B2 (en) | Tracking status and restarting distributed replication | |
US20200348852A1 (en) | Distributed object replication architecture | |
US11327799B2 (en) | Dynamic allocation of worker nodes for distributed replication | |
US11349915B2 (en) | Distributed replication and deduplication of an object from a source site to a destination site | |
CN114341792B (zh) | 存储集群之间的数据分区切换 | |
US10417190B1 (en) | Log-structured file system for zone block devices with small zones | |
US10382380B1 (en) | Workload management service for first-in first-out queues for network-accessible queuing and messaging services | |
AU2011256912B2 (en) | Systems and methods for providing increased scalability in deduplication storage systems | |
US8738673B2 (en) | Index partition maintenance over monotonically addressed document sequences | |
US9990224B2 (en) | Relaxing transaction serializability with statement-based data replication | |
US20130326537A1 (en) | Dependency management in task scheduling | |
US20120239722A1 (en) | Read-only operations processing in a paxos replication system | |
US11914894B2 (en) | Using scheduling tags in host compute commands to manage host compute task execution by a storage device in a storage system | |
US10185605B2 (en) | In-order message processing with message-dependency handling | |
US20150286671A1 (en) | Transaction system | |
US20130198477A1 (en) | Managing remote data replication | |
US10620871B1 (en) | Storage scheme for a distributed storage system | |
US20120224482A1 (en) | Credit feedback system for parallel data flow control | |
CN111971667B (zh) | 可恢复的合并排序 | |
US20140108367A1 (en) | Client apparatus and database server for resumable transaction and method thereof | |
US20220382473A1 (en) | Managing deduplication operations based on a likelihood of duplicability | |
US8775371B2 (en) | Synchronizing an auxiliary data system with a primary data system | |
JP6764175B2 (ja) | データベース管理システム、及び、データベース管理方法 | |
US9256634B2 (en) | Resuming big data transformations | |
US11379147B2 (en) | Method, device, and computer program product for managing storage system |
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 |