Abstract:
A method, apparatus, and article of manufacture for a computer implemented recover/build index system. The recover/build index system builds a database index for a database file by scanning partitions of the database file in parallel to retrieve key values and their associated record identifier (rid) values. The recover/build index system then sorts the scanned key/rid values for each partition in parallel. Next, the recover/build index system performs one or more merges on the sorted key/rid values from all of the partitions to generate a single key/rid value stream. Finally, the recover/build index system builds the index using the single key/rid value stream.

Description:
BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     This invention relates in general to computer-implemented recover/build index systems, and in particular to high performance recover/build index systems by unloading database files in parallel. 
     2. Description of Related Art 
     An index is an ordered set of references to the records or rows in a database file or table. The index is used to access each record in the file using a key (i.e., one of the fields of the record or attributes of the row). However, building an index for a large file can take a considerable amount of elapsed time. The process involves scanning all records in the file, extracting a key value and record identifier (rid) value from each of the records, sorting all of the key/rid values, and then building the index from the sorted key/rid values. Typically, the scanning, sorting, and index build steps are performed serially, which can be time consuming in the case of a large database file. 
     Additionally, when computer systems fail, the index could be corrupted or destroyed. In this case, recovery of the index, which involves rebuilding the index, can be very time consuming. Therefore, there is a need in the art for techniques that building indices more efficiently. 
     SUMMARY OF THE INVENTION 
     To overcome the limitations in the prior art described above, and to overcome other limitations that will become apparent upon reading and understanding the present specification, the present invention discloses a method, apparatus, and article of manufacture for a computer implemented recover/build index system. In accordance with the present invention, the recover/build index system builds an index for a file by scanning partitions of the file in parallel to retrieve key/rid values. The recover/build index system then sorts the scanned key/rid values for each partition in parallel. Next, the recover/build index system performs one or more merges on the sorted key/rid values from all of the partitions to generate a single key value stream. Finally, the recover/build index system builds the index using the single key/rid value stream. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     Referring now to the drawings in which like reference numbers represent corresponding parts throughout: 
     FIG. 1 is a block diagram illustrating an exemplary hardware environment used to implement the preferred embodiment of the invention; 
     FIG. 2 is a flowchart illustrating the general logic of the recover/build index system according to the present invention; 
     FIG. 3 is a dataflow diagram that illustrates the operation of a first embodiment of the recover/build index system according to the present invention; and 
     FIG. 4 is a dataflow diagram that illustrates the operation of a second embodiment of the recover/build index system according to the present invention. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT 
     In the following description of the preferred embodiment, reference is made to the accompanying drawings which form a part hereof, and which is shown by way of illustration a specific embodiment in which the invention may be practiced. It is to be understood that other embodiments may be utilized as structural changes may be made without departing from the scope of the present invention. 
     Hardware Environment 
     FIG. 1 is a block diagram illustrating an exemplary hardware environment used to implement the preferred embodiment of the invention. In the exemplary environment, a computer system 100 is comprised of one or more processors 102 coupled via an interconnect 104. One or more peripheral devices 106, including fixed and/or removable data storage devices such as a hard disk, floppy disk, CD-ROM, tape, etc., may be coupled to each of processors 102. 
     The present invention is typically implemented using a number of computer programs executed in parallel by the processors 102, including scan programs 108, sort programs 110, merge programs 112, and index build programs 114. Using these computer programs, the present invention builds an index 116 for a database file 118 having one or more partitions 120, all of which are stored in one or more of the data storage devices 106. Preferably, each of the partitions 120 is scanned in parallel by the scan programs 108 and the scanning results are then sorted in parallel by the sort programs 110, in order to enhance the performance of the system. 
     The scan 108, sort 110, merge 112, and index build 114 computer programs all execute under the control of an operating system, such as MVS, AIX, OS/2, WINDOWS NT, WINDOWS, UNIX, etc. Further, the scan 108, sort 110, merge 112, and index build 114 computer programs are all tangibly embodied in or readable from a computer-readable medium, e.g. one or more of the data storage devices 106 and/or data communications devices coupled to the computer system 100. Moreover, the scan 108, sort 110, merge 112, and index build 114 computer programs are all comprised of instructions which, when read and executed by the processors 102, cause the processors 102 to perform the steps necessary to implement and/or use the present invention. 
     Those skilled in the art will recognize that any combination of the above components, or any number of different components, peripherals, and other devices, may be used to implement the present invention. For example, the present invention may implemented on lesser or greater numbers of processors 102 without departing from the scope of the present invention. Further, the number and configuration of the scan 108, sort 110, merge 112, and index build 114 computer programs may be altered without departing from the scope of the present invention. Finally, the structure of the index 116, file 118, and/or partitions 120 may be altered without departing from the scope of the present invention. 
     Logic 
     FIG. 2 is a flowchart illustrating the general logic of the recover/build index system according to the present invention. The recover/build index system of the present invention builds an index 116 by scanning or unloading partitions 120 of the file 118 in parallel. 
     In step 200, concurrent scan programs 108 are used to scan every record of each partition 120. The scan programs 108 executing in parallel extract key values (of a particular key) and record identifiers (rids) or pointers from the partitions 120 to create a key/rid or scan stream for each partition 112. While the scan programs 108 are scanning the partitions 120, the file 118 can still be read by other programs. The parallel scan programs 108 pass the scan streams to the sort programs 110. 
     In step 202, the sort programs 110 executing in parallel receive the scan streams for each partition 120 and create a sort stream therefrom, and then pass the sort stream to the merge program 112. Each sort program 110 can accept a scan stream from one or more scan programs 108. 
     In step 204, the merge program 112 merges the sort streams received from the sort programs 110 to create a merge stream. The merge program 112 accepts the sort streams from two or more sort programs 110. The merge program 112 then passes the merge stream to an index build program 114. 
     In step 206, the index build program 114 builds the index 116 from the merge stream received from the merge program 112. The index 116 is built in a compact and compressed manner, because the key values are sorted. As a result, complete blocks or pages of sequential key/rid values can be written to the index 116 and the index build program 114 improves the efficiency of I/O and improves the final organization of the index 116. 
     Moreover, by performing many of the steps for building the index 116 in parallel, the high performance recover/build index system reduces the amount of time that it takes to build an index 116. Additionally, the recover/build index system can exploit the use of multiple processors 102. Additionally, piping the data between the sort 110 and merge 112 programs improves performance. Intermediate communication or intermediate files are used to transfer data between the sort 110, merge 112, and index build 114 programs. 
     Additionally, after scanning the partitions 120 to extract key values and record identifiers, this information is written to a file on a data storage device 106. Then, in case of system failure, the index 116 can be quickly rebuilt using the steps discussed above. 
     Dataflow Diagrams 
     FIG. 3 is a dataflow diagram that illustrates the operation of a first embodiment of the recover/build index system according to the present invention. In this embodiment, the recover/build index system includes multiple scan programs 108 that are performed in parallel by multiple processors 102 against multiple partitions 120 of one file 118 to extract key/rid values. Similarly, sort programs 110 are performed in parallel to sort the extracted key/rid values. Thereafter, one or more merge programs 112 are performed to merge the key/rid values received from the sort programs 110. Finally, an index build program 114 is performed using a single stream of key/rid values from the merge programs 112 to build the index 116. 
     FIG. 4 is a dataflow diagram that illustrates the operation of a second embodiment of the recover/build index system according to the present invention. In this embodiment of the recover/build index system, multiple merge programs 112a-b are performed in parallel. Again, scan programs 108 are performed in parallel to retrieve key/rid values. Then, multiple sort programs 110 are performed in parallel to sort the key/rid values by their key. Next, multiple intermediate merge programs 112a are performed on the key/rid values to generate merged data streams that are forwarded to a single final merge program 112b that merges all of the key/rid values (wherein the merge programs 112a-b are referred to as nested merges). Finally, an index build program 114 is performed to build the index 116 using the merged key/rid values. If more than one index 116 is to be built, the above steps may be performed on multiple streams of different key/rid values. 
     Conclusion 
     The foregoing description of the preferred embodiment of the invention has been presented for the purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed. Many modifications and variations are possible in light of the above teaching. It is intended that the scope of the invention be limited not by this detailed description, but rather by the claims appended hereto.