Cost-based optimizer for an XML data repository within a database

Information

  • Patent Grant
  • 7930277
  • Patent Number
    7,930,277
  • Date Filed
    Wednesday, April 21, 2004
    21 years ago
  • Date Issued
    Tuesday, April 19, 2011
    14 years ago
Abstract
Cost-based optimizer functionality for an XML database repository provides means for optimizing the execution of database queries that access XML resources in the database repository. Statistics about XML resources that are stored in the database repository are gathered, stored and utilized by a query optimizer to compute computational costs associated with each of multiple methods of accessing particular XML resources requested in a database query. Hence, the optimizer is able to select the most efficient query execution plan based on the costs of possible access paths. In one embodiment, specific statistics about the hierarchical structure of XML resources stored in the XML database repository are gathered, stored in a relational table in the database management system, and used to compute the selectivity of query predicates and the index cost associated with traversing one or more indexes to access requested XML resources.
Description
FIELD OF THE INVENTION

The present invention relates generally to database systems and, more specifically, to a cost-based optimizer for an XML data repository within a relational database management system (RDBMS).


BACKGROUND OF THE INVENTION

Database Query Optimizer


In a database system, data is stored in one or more data containers, each container contains records, and the data within each record is organized into one or more fields. In relational database systems, the data containers are referred to as tables, the records are referred to as rows, and the fields are referred to as columns. In object oriented databases, the data containers are referred to as object classes, the records are referred to as objects, and the fields are referred to as attributes. Other database architectures may use other terminology.


A database management system (DBMS) retrieves and manipulates data in response to receiving a database statement. Typically, the database statement conforms to a database language, such as the Structured Query Language (SQL). A database statement can specify a query operation, a data manipulation operation, or a combination thereof. A database statement that specifies a query operation is referred to herein as a query.


When a DBMS receives a query, the DBMS may generate an execution plan. An execution plan is important because it defines the steps and operations performed by a DBMS to service a request. DBMSs often include an optimizer for generating execution plans that are optimized for efficiency. When determining what steps to include in an execution plan, and the order in which the steps are performed, a DBMS accounts for many factors that affect efficiency. One important factor that is considered is the computational cost associated with executing a query according to a given execution plan. A cost-based optimizer (CBO) evaluates all possible data access paths for a query and determines the most efficient execution plan based on the cost of all access paths.


For example, a query with two ANDed predicates will request rows that satisfy both predicates. If the column(s) in the first predicate is indexed, then a DBMS may generate an execution plan that uses the index to access data more efficiently.


To determine an efficient execution plan for a query, the query optimizer relies on persistently stored statistics to estimate the costs of alternative execution plans, and chooses the plan with the lowest overall estimated cost. The statistics are computed and stored before the query is received. Statistics are used to estimate important optimizer cost parameters such as the selectivity of various predicates and predicate clauses (e.g., the fraction or percentage of rows in a table that match some condition represented in a predicate or predicate clause). Examples of statistics include table cardinalities (the number of rows in a table), the number of distinct values for a column, the minimum and maximum values in the column, and histograms, which is data that specifies the distribution of values in the columns, e.g., the number of rows that have particular column values for a column or the number of rows that have a column value that falls within a range. However, for some database statements, statistics needed by the query optimizer may not be available, such as statistics for certain repositories managed by the DBMS.


XML Database


With support for XML type data as a native data type in information management systems, such as a relational database system (RDBMS) or object-relational database system (ORDBMS), the contents of XML documents can be stored in such systems. For example, in the context of a relational database, XML data may be stored in columns of a relational table and users can query the XML data via a SQL query.


One known implementation of an XML data repository, which provides the mechanisms for the storage of XML data in a RDBMS and access thereto, is referred to herein as an XML database (“XDB”). The key XDB-enabling technologies can be grouped into two major classes: (1) XML data type, which provides a native XML storage and retrieval capability strongly integrated with SQL; and (2) XDB repository, which provides foldering, access control, versioning, and the like, for XML resources.


The XML data type can be used as a datatype of a column of a relational table, and includes a number of useful methods to operate on XML data. XML type data can be stored, for example, as a LOB (large object) or according to object-relational storage. If stored as a LOB, XML data may be accessed via a text index, and if stored object relationally, XML data may be accessed via a btree index, for example. Some benefits that result from the XML data type include support for XML schemas, XPath searches, XML indexes, XML operators, XSL transformations, and XDB repository views (e.g., RESOURCE_VIEW and PATH_VIEW, described hereafter).


The XDB repository provides a repository for managing XML data. The XDB repository provides important functionality with respect to the XML data, for example, access control lists (ACL), foldering, WebDAV (Web-based Distributed Authoring and Versioning), FTP (File Transfer Protocol) and JNDI (Java Naming and Directory Interface) access, SQL repository search, hierarchical indexing, and the like.


XDB repository views provide a mechanism for SQL access to data that is stored in the XDB. Data stored in XDB repository via protocols like FTP, WEBDAV or JNDI can be accessed in SQL via these views. XDB provides two repository views to enable SQL access to the repository: RESOURCE_VIEW and PATH_VIEW. Both views contain the resource properties, the path names and resource IDs. The PATH_VIEW has an additional column for the link properties.


With prior approaches to cost-based optimizers, the optimizers were unable to retrieve the real cost of a query on XDB repository views, so the optimizer relied on default statistics to choose a query execution plan. Since the CBO is not aware of the implementation of XDB repository views and user defined operators associated to the views, CBO can only estimate the default statistics, which is far from being accurate. Thus, the result is sub optimal query execution plans. For example, in the absence of an optimizer mechanism for an XDB repository, the CBO may choose a sub optimal query plan involving both a hierarchical index scan and a btree index scan, where the selectivity of the predicate with the XDB operator is very high while the selectivity of the predicate with the btree index on it is very low. In such a scenario, the optimal query plan would be a btree index scan followed by functional evaluation of the repository view operators.


The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.





BRIEF DESCRIPTION OF THE DRAWINGS

The present invention is illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements and in which:



FIG. 1 is a diagram that illustrates hierarchically-organized data;



FIG. 2 is a flow diagram that illustrates a method for computing computational costs associated with accessing XML resources stored in an XML database repository, according to an embodiment of the invention;



FIG. 3 is a block diagram that illustrates an example of an operating environment in which an embodiment of the invention may be implemented; and



FIG. 4 is a block diagram that illustrates a computer system upon which an embodiment of the invention may be implemented.





DETAILED DESCRIPTION OF EMBODIMENTS OF THE INVENTION

Techniques are described for applying cost-based optimizer functionality to an XML data (also referred to as XML resource) repository within a database.


In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be apparent, however, that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the present invention.


Overview of Embodiments

Cost-based optimizer functionality for an XML database repository provides means for optimizing the execution of database queries that access XML resources in the database repository. Statistics about XML resources that are stored in the database repository are gathered, stored and utilized by a query optimizer to compute computational costs associated with each of multiple methods of accessing (referred to as “access paths”) particular XML resources requested in a database query. Hence, the optimizer is able to select the most efficient query execution plan based on the costs of possible access paths. For example, with respect to one existing commercially available XML repository within a database management system, execution of SQL queries on XML database repository views (e.g., a RESOURCE_VIEW and/or PATH_VIEW) that contain operators such as UNDER_PATH and/or EQUALS_PATH can be optimized based on the cost of the possible access paths.


In one embodiment, specific statistics about the hierarchical structure of XML resources stored in the XML database repository are gathered, stored in a relational table in the database management system, and used to compute the selectivity of query predicates and the index cost associated with traversing one or more indexes to access the requested XML resources. In a related embodiment, the function cost associated with the functional evaluation of the repository view operators is also computed. In one embodiment, the index cost comprises the computational cost associated with CPUs used for accessing the resources and the computational cost associated with reading data (or “disk”) blocks in which portions of the index are stored.


Hierarchically-Structured XML Data

XML data can be organized in a hierarchical structure which begins at a root node and in which each level of the structure contains one or more nodes. Each node is either a container node (or simply a “container”) or a file. For example, a container node may represent a folder or directory, whereas a file has contents. An XML file contains XML elements and attributes. Files and empty containers are all leaf nodes.



FIG. 1 is a diagram that illustrates hierarchically-organized data. In FIG. 1, root 102 is the root node; container 104, container 106, and container 110 are container nodes; and file 108, file 112, file 114, file 116, and empty container 104 are leaf nodes. Container 104 is illustrated as an empty container node, e.g., a folder containing no files, and is, therefore, considered a leaf node. FIG. 1 is a simplified representation of a set of hierarchically-structured data, because the structure of XML data that is stored in an XML repository (see XDB 304 of FIG. 3) within a database management system (see DBMS 302 of FIG. 3) is typically much more complex.


Since XML files, referred to herein as “resources” or “data”, can be organized in a hierarchical structure, a hierarchical index may be constructed for the XML files. As embodiments are described hereafter, at least a portion of the cost of accessing a given resource stored in an XML database repository includes the cost of accessing the given resource from a table in which the given resource is stored, by traversing an index on the table. One technique for indexing hierarchically-structured resources is to construct and maintain a hierarchical index as described in U.S. Pat. No. 6,427,123 entitled “Hierarchical indexing for accessing hierarchically organized information in a relational system” and U.S. Pat. No. 6,571,231 entitled “Maintenance of hierarchical index in relational system.”


Method for Computing Costs of Data Access Paths


FIG. 2 is a flow diagram that illustrates a method for computing computational costs associated with accessing XML resources stored in an XML database repository, according to an embodiment of the invention. As previously discussed, one known implementation of mechanisms for the storage of XML data in a RDBMS, and access thereto, is referred to herein as an XML database (“XDB”), part of which is an XDB repository. The term “XDB repository” is used to reference a particular implementation of a repository for XML data within a relational database management system, and the term “XML database repository” is used herein to generally reference any implementation of a repository for XML data within a database management system. The method illustrated in FIG. 2 is in the context of an XML database repository and, therefore, applicable to any implementation of a repository for XML data within a database management system.


Gathering Statistics About XML Resources

At block 202, statistics about XML resources that are stored in an XML database repository are gathered. When a node is said to be “under” a particular node, it means (1) that the node is at a level, in a hierarchy in which the XML data is organized, further from the root node than the particular node, and (2) that the node is accessible from the database repository via a path through the particular node. In reference to FIG. 1, file 114 and file 116 are under container 110; container 110 and file 112 are under container 106; and so on.


In one embodiment, the following statistics are gathered, to provide bases for computing computational costs associated with one or more access paths to a given XML resource stored in an XML database repository. Furthermore, examples of column names for a table or tables in which each of the respective statistics are stored, are provided in brackets for subsequent reference thereto. Such statistics support cost computations for accessing a node, e.g., a file or document, in which a requested XML resource is logically stored (e.g., selectivity, as described hereafter). Other mechanisms are utilized to compute costs for accessing a particular resource associated with a node (e.g., index cost, as described hereafter).


(1) Total number of nodes (e.g., files and containers) under a particular node [resoid], i.e., at all levels under the particular node; [total_rows].


(2) Immediate number of nodes (e.g., files and containers) under a particular node [resoid], i.e., at the level immediately under the particular node; [fan_out].


(3) Total number of containers under a particular node [resoid], i.e., at all levels under the particular node; [total_containers].


(4) Immediate number of containers under a particular node [resoid], i.e., at the level immediately under the particular node; [immediate_containers].


(5) The depth of a particular node, i.e., how many levels from the root node; [depth].


With the known implementation of the XDB repository, statistics about XML resources stored in the XDB repository can be collected or deleted via an ANALYZE command, described in Chapter 30 of “Oracle9i Database Administrator's Guide Release 1 (9.0.1), Part Number A90117-01”, or a DBMS_STATS package, described in Chapter 3 of “Oracle9i Database Performance Guide and Reference Release 1 (9.0.1), Part Number A87503-02”. Other implementations can collect statistics using similar functionalities.


In one embodiment, one or more of the foregoing statistics are gathered for each container node, rather than all of the statistics. Hence, a particular implementation of the techniques described herein may not gather or use all of the foregoing five statistics for cost computations.


In one embodiment, only queries that contain predicates or operators with a depth of one or infinity are optimized, because such queries represent the majority of practical scenarios. A depth of infinity is the default depth of a predicate or operator when a depth is not specified.


Storing Statistics About XML Resources

At block 204, the statistics are stored. In one embodiment, the statistics are stored in a relational table of a database of which the XML database repository is part, such as a relational table in a RDBMS. Hence, the resoid column of such a table links the statistics row to a node in the repository. Based on the embodiment in which optimization is only performed for queries with a depth of one or infinity, total_rows and total_containers store statistics relevant to infinite depth, and fan_out and immediate_containers store statistics relevant to a depth of one. The statistics stored in the depth column are used to enhance search and identification of a given resource.


In one embodiment, the table in which the statistics are stored (the “statistics table”) is implemented as a schema-based XML table. Each row in the statistics table corresponds to a node in the XML data hierarchy. This approach leverages the potential of keeping the statistics table in a generally consistent form with the rest of the data hierarchy stored in the XML database repository, which is XML-enabled.


Options for implementing storage of the statistics include (1) storing the statistics in a hierarchical index on the table(s) in which the resources are stored (“resource table”), such as a hierarchical index table as described in U.S. Pat. No. 6,427,123; (2) storing the statistics in the resource table; and (3) storing the statistics in a table separate from the resource table. In an embodiment, the statistics are stored in a separate table (option 3 above), such as a schema-based table of XML data type.


Computing Costs of XML Resource Access Paths

At block 206, in response to a request for access to XML resources from the database repository, a computational cost associated with one or more methods for accessing the requested XML resources (i.e., access paths) is computed, based on at least a portion of the statistics that are gathered at block 202. For example, the computational cost of a SQL query is computed as described hereafter, in response to receiving the SQL query at a database server.


In one embodiment, the computational cost comprises selectivity and index cost (both are described hereafter). In an alternative embodiment, the computational cost comprises one from the group consisting of selectivity and index cost. However, the specific parameters that are calculated as components of the computational cost may vary from implementation to implementation.


Selectivity

In one embodiment, an optimizer uses the statistics stored in the statistics table to calculate the selectivity of predicates containing operators on the XML database repository. For example, the optimizer calculates the selectivity of predicates containing path-related operators associated with the hierarchy in which the XML data is organized.


In one embodiment, a path-related operator is an operator that determines whether a particular XML resource can be located in a specified column of the resource table in said database repository through a particular specified path through a portion of the hierarchy. In other words, the operator determines whether the particular XML resource is “under” the specified path. With the known implementation of the XDB repository, such an operator is referred to as UNDER_PATH; however, embodiments are not limited to use of that specific operators.


In one embodiment, a path-related operator is an operator that determines whether a particular XML resource can be located in a specified column of the resource table in said database repository at a terminal location of a particular specified path through a portion of the hierarchy. With the known implementation of the XDB repository, such an operator is referred to as EQUALS_PATH; however, embodiments are not limited to use of that specific operators.


Selectivity is defined as a percentage number between zero (0) and one hundred (100). Given a predicate in the following form or with a similar operator specified, where depth is not specified (default is infinity),

UNDER_PATH(res, ‘/p1’)=1,


where “res” is the column name and “/p1” is the specified path, the selectivity of the predicate can be calculated as:

<selectivity>=(<total_rows(‘/p1’)>/<total_rows(root)>)*100,


where the “root” is the node of the hierarchy from which all paths originate.


Given a predicate in the following form or with a similar operator specified, where depth is set to 1,

UNDER_PATH(res, 1, ‘/p1’)=1,

the selectivity can be calculated as:

<selectivity>=(<fan_out(‘/p1’)>/<total_rows(root)>)*100.


For a predicate that contains an operator like EQUALS_PATH( )=1, or with a similar operator specified, the number of rows in the output is always one (1) and, therefore, its selectivity can be calculated as:

<selectivity>=(1/<total_rows(root)>)*100.


For a predicate that contains an operator such as UNDER_PATH(‘/’) or with a similar operator specified, without specified depth (default is infinity), the selectivity is always 100%, so there is no need to query the statistics table in this case.


Index Cost

In an embodiment, the optimizer defines a cost function for hierarchical indexes on the XML database repository. Whenever an index scan on the hierarchical index (sometimes referred to as traversing the index) is part of a valid access path, the optimizer invokes this index cost function, which computes a composite cost comprising (1) a computational cost value associated with one or more CPUs that are used for traversing the index (e.g., a CPU cost); and/or (2) a computational cost value associated with reading data blocks in which portions of the index are stored (e.g., an I/O cost). Furthermore, a network cost may be included in the index cost.


CPU Cost


The CPU cost portion of the index cost is an estimate of the CPU cost of accessing an XML resource based on the elapsed time to access the resource. A CPU cost function approximates the number of CPU instructions corresponding to a specified time interval. The CPU cost function takes as input the elapsed time of the index scan process, measures CPU units by multiplying the elapsed time by the processor speed of the machine, and returns the approximate number of CPU instructions that should be associated with the index scan.


With a known commercial database management system, the CPU cost associated with a hierarchical index scan to access XML resources can be computed via an ESTIMATE_CPU_UNITS command, described in Chapter 31 of “Oracle9i Supplied PL/SQL Packages and Types Reference Release 1 (9.0.1), Part Number A89852-02”. However, embodiments are not limited to use of that specific command, as other implementations can compute the CPU cost using similar functionalities.


I/O Cost


I/O cost is the number of data blocks associated with the hierarchical index table read by the predicate operators of interest, for example, the UNDER_PATH operator. In one embodiment, only the data blocks occupied by containers are of interest when computing the I/O cost. In most scenarios, there is one block per container. However, in scenarios in which a container is across multiple blocks, each block is counted as a different container in the total_containers column in the statistics table.


When queries with a specified depth exceeding 1 are optimized, statistics about the median depth of the various paths of the hierarchy under a given node (median_depth) and the maximum depth of the various paths of the hierarchy under a given node (max_depth) are useful. The distribution of containers under a given node is not included in the statistics table, but the total number of data blocks occupied by containers of interest can be estimated from the following three values: total_containers, median_depth and max_depth.


Given a predicate in the following form or with a similar operator specified, where depth is not specified,

UNDER_PATH(res, ‘/p1’)=1,

the I/O cost can be calculated as follows:

<IO_cost>:=<total_containers(‘/p1’)>


Given a predicate in the following form or with a similar operator specified,

UNDER_PATH(res, 1, ‘/p1’)=1,

where depth is 1, the I/O cost can be calculated as follows:

<IO_cost>:=<immediate_containers(‘/p1)>


For a predicate containing EQUALS_PATH or with a similar operator specified, the I/O cost is equal to the number of components in the path. For example, accessing a resource specified by “/sys/home/foo/bar” will access three containers (“sys”, “home” and “foo”) and, therefore, will access three data blocks, to reach the resource “bar”.


Function Cost

In one embodiment, another component of the computational cost of accessing an XML resource in an XML database repository is a function cost. The function cost is calculated by the optimizer when functional implementations of path-based operators, such as UNDER_PATH and EQUALS_PATH and similar functions, are valid access paths.


The cost of functional implementation of the UNDER_PATH or similar functioning path-based operator is often primarily from a CONNECT BY or similar functioning clause, which retrieves all the paths for a given resource. Therefore, in one embodiment, the I/O cost and CPU cost of the CONNECT BY are used to calculate the function cost. For example, the I/O cost and CPU cost for the CONNECT BY clause can be determined from an internal EXPLAIN PLAN on the CONNECT BY, i.e., the function cost is retrieved by taking advantage of existing functionality offered by the cost based optimizer. In another embodiment, the function cost is calculated similarly to the index cost described herein, i.e., based on the I/O cost and the CPU cost associated with the functional implementations of the path-based operators.


In one embodiment, however, the I/O cost and CPU cost retrieved from the plan table are multiplied by a constant factor to reflect the fact that the cost of a functional implementation also includes other overhead and is relative to the function cost of an index scan as well as other indexes.


Operating Environment Example


FIG. 3 is a block diagram that illustrates an example of an operating environment in which an embodiment may be implemented. The techniques described herein can be implemented in a database management system 302, such as a relational database management system (RDBMS). The database management system 302 comprises a database server 304 and a database 306.


Generally, the database 306 comprises data and metadata that is stored on a persistent memory mechanism, such as a set of hard disks that are communicatively coupled to the database server 304. Such data and metadata may be stored in database 306 logically, for example, according to relational database constructs, multidimensional database constructs, or a combination of relational and multidimensional database constructs. Database 306 comprises a XML database repository 312 for storing XML data, as described herein and on which XML data access requests are made.


Database server 304 is a combination of integrated software components and an allocation of computational resources (such as memory and processes) for executing the integrated software components on a processor, where the combination of the software and computational resources are used to manage a particular database, such as database 306. Among other functions of database management, a database server such as database server 304 typically governs and facilitates access to database 306 by processing requests from clients to access the data in database 306. Database server 304 can be implemented on one or more conventional computer systems, such as computer system 400 illustrated in FIG. 4.


Database server 304 comprises functional components for performing the techniques described herein. These functional components are referred to as a statistics module 308 and a cost-based optimizer (CBO) 310. Each of statistics module 308 and CBO 310 comprise one or more sequences of instructions which, when executed, cause one or more processors to perform certain actions. For example, statistics module 308 comprises instructions for performing blocks 202 and 204 of FIG. 2 and CBO 310 comprises instructions for performing block 206 of FIG. 2.


Hardware Overview


FIG. 4 is a block diagram that illustrates a computer system 400 upon which an embodiment of the invention may be implemented. Computer system 400 includes a bus 402 or other communication mechanism for communicating information, and a processor 404 coupled with bus 402 for processing information. Computer system 400 also includes a main memory 406, such as a random access memory (RAM) or other dynamic storage device, coupled to bus 402 for storing information and instructions to be executed by processor 404. Main memory 406 also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 404. Computer system 400 further includes a read only memory (ROM) 408 or other static storage device coupled to bus 402 for storing static information and instructions for processor 404. A storage device 410, such as a magnetic disk, optical disk, or magneto-optical disk, is provided and coupled to bus 402 for storing information and instructions.


Computer system 400 may be coupled via bus 402 to a display 412, such as a cathode ray tube (CRT) or a liquid crystal display (LCD), for displaying information to a computer user. An input device 414, including alphanumeric and other keys, is coupled to bus 402 for communicating information and command selections to processor 404. Another type of user input device is cursor control 416, such as a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor 404 and for controlling cursor movement on display 412. This input device typically has two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that allows the device to specify positions in a plane.


The invention is related to the use of computer system 400 for implementing the techniques described herein. According to one embodiment of the invention, those techniques are performed by computer system 400 in response to processor 404 executing one or more sequences of one or more instructions contained in main memory 406. Such instructions may be read into main memory 406 from another computer-readable medium, such as storage device 410. Execution of the sequences of instructions contained in main memory 406 causes processor 404 to perform the process steps described herein. In alternative embodiments, hard-wired circuitry may be used in place of or in combination with software instructions to implement the invention. Thus, embodiments of the invention are not limited to any specific combination of hardware circuitry and software.


The term “computer-readable medium” as used herein refers to any medium that participates in providing instructions to processor 404 for execution. Such a medium may take many forms, including but not limited to, non-volatile media, volatile media, and transmission media. Non-volatile media includes, for example, optical, magnetic, or magneto-optical disks, such as storage device 410. Volatile media includes dynamic memory, such as main memory 406. Transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise bus 402. Transmission media can also take the form of acoustic or light waves, such as those generated during radio-wave and infra-red data communications.


Common forms of computer-readable media include, for example, a floppy disk, a flexible disk, hard disk, magnetic tape, or any other magnetic medium, a CD-ROM, any other optical medium, punchcards, papertape, any other physical medium with patterns of holes, a RAM, a PROM, and EPROM, a FLASH-EPROM, any other memory chip or cartridge, a carrier wave as described hereinafter, or any other medium from which a computer can read.


Various forms of computer readable media may be involved in carrying one or more sequences of one or more instructions to processor 404 for execution. For example, the instructions may initially be carried on a magnetic disk of a remote computer. The remote computer can load the instructions into its dynamic memory and send the instructions over a telephone line using a modem. A modem local to computer system 400 can receive the data on the telephone line and use an infra-red transmitter to convert the data to an infra-red signal. An infra-red detector can receive the data carried in the infra-red signal and appropriate circuitry can place the data on bus 402. Bus 402 carries the data to main memory 406, from which processor 404 retrieves and executes the instructions. The instructions received by main memory 406 may optionally be stored on storage device 410 either before or after execution by processor 404.


Computer system 400 also includes a communication interface 418 coupled to bus 402. Communication interface 418 provides a two-way data communication coupling to a network link 420 that is connected to a local network 422. For example, communication interface 418 may be an integrated services digital network (ISDN) card or a modem to provide a data communication connection to a corresponding type of telephone line. As another example, communication interface 418 may be a local area network (LAN) card to provide a data communication connection to a compatible LAN. Wireless links may also be implemented. In any such implementation, communication interface 418 sends and receives electrical, electromagnetic or optical signals that carry digital data streams representing various types of information.


Network link 420 typically provides data communication through one or more networks to other data devices. For example, network link 420 may provide a connection through local network 422 to a host computer 424 or to data equipment operated by an Internet Service Provider (ISP) 426. ISP 426 in turn provides data communication services through the world wide packet data communication network now commonly referred to as the “Internet” 428. Local network 422 and Internet 428 both use electrical, electromagnetic or optical signals that carry digital data streams. The signals through the various networks and the signals on network link 420 and through communication interface 418, which carry the digital data to and from computer system 400, are exemplary forms of carrier waves transporting the information.


Computer system 400 can send messages and receive data, including program code, through the network(s), network link 420 and communication interface 418. In the Internet example, a server 430 might transmit a requested code for an application program through Internet 428, ISP 426, local network 422 and communication interface 418.


The received code may be executed by processor 404 as it is received, and/or stored in storage device 410, or other non-volatile storage for later execution. In this manner, computer system 400 may obtain application code in the form of a carrier wave.


Extensions and Alternatives

Alternative embodiments of the invention are described throughout the foregoing description, and in locations that best facilitate understanding the context of the embodiments. Furthermore, the invention has been described with reference to specific embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the invention. For example, embodiments were described herein in reference to SQL-based access to the XML database repository; however, the broad techniques described herein are applicable to other means for accessing XML resources within an XML database repository, such as with FTP (File Transfer Protocol) and HTTP (HyperText Transfer Protocol). Therefore, the specification and drawings are, accordingly, to be regarded in an illustrative rather than a restrictive sense.


In addition, in this description certain process steps are set forth in a particular order, and alphabetic and alphanumeric labels may be used to identify certain steps. Unless specifically stated in the description, embodiments of the invention are not necessarily limited to any particular order of carrying out such steps. In particular, the labels are used merely for convenient identification of steps, and are not intended to specify or require a particular order of carrying out such steps.

Claims
  • 1. A method comprising the computer-implemented steps of: gathering statistics by a database server about nodes that are stored in a database repository that is managed by the database server;wherein said nodes form a hierarchy;wherein each node is either an XML file or an XML file container;wherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;storing said statistics; andin response to a request to the database server for access to one or more XML resources from said database repository, the database server computing a computational cost associated with each of two or more methods of accessing said one or more XML resources from said database repository, based on said statistics;wherein the two or more methods of accessing said one or more XML resources from said database repository include accessing said one or more XML resources through an index and accessing said one or more XML resources without using the index;wherein the method is performed by one or more computing devices;wherein XML files of said nodes are XML resources, and wherein the step of computing a computational cost comprises (a) computing a selectivity value for each of one or more predicates, from said request, that contain operators on said database repository and (b) computing a computational cost of traversing, to locate a particular XML resource specified in said request, an index in which said XML resources are indexed for accessing said database repository.
  • 2. The method of claim 1, wherein the step of gathering statistics comprises gathering one or more data from a group consisting of: a total number of nodes, in said hierarchy, that are accessible via a path through a specified node,a total number of XML file containers, in said hierarchy, that are accessible via a path through said specified node,a total number of nodes, in said hierarchy, that are accessible via a path through said specified node and that are in a level of said hierarchy that is immediately under a level of said specified node,a total number of XML file containers, in said hierarchy, that are accessible via a path through said specified node and that are in a level of said hierarchy that is immediately under said level of said specified node, anda number of levels, from a root node of said hierarchy, at which said specified node is organized in said hierarchy.
  • 3. The method of claim 1, wherein the step of storing statistics comprises storing said statistics in a relational table of a database of which said database repository is part.
  • 4. The method of claim 3, wherein XML files of said nodes are XML resources, and wherein said relational table is a first relational table that is a different table than a second relational table in which said XML resources are stored in said database repository.
  • 5. The method of claim 3, wherein said relational table is a relational table in which said XML resources are stored in said database repository.
  • 6. The method of claim 1, wherein XML files of said nodes are XML resources, and wherein the step of storing statistics comprises storing said statistics in a hierarchical index table in which said XML resources are indexed for accessing said database repository.
  • 7. A method comprising the computer-implemented steps of: gathering statistics by a database server about nodes that are stored in a database repository that is managed by the database server;wherein said nodes form a hierarchy;wherein each node is either an XML file or an XML file container;wherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;storing said statistics; andin response to a single request to the database server for access to one or more XML resources from said database repository, before the database server executes said single request, the database server computing a computational cost associated with each of two or more methods of accessing said one or more XML resources from said database repository, based on said statistics;wherein the method is performed by one or more computing devices;wherein the step of computing a computational cost comprises computing a selectivity value for each of one or more predicates, from said request, that contain operators on said database repository; andwherein XML files of said nodes are XML resources, and wherein each of said XML resources is stored, in association with a location of a node in said hierarchy, in a column of a table in said database repository, and wherein an operator contained in at least one of said one or more predicates is an operator that determines whether a particular XML resource can be located in said database repository through a particular specified path, specified in said at least one predicate, through a portion of said hierarchy.
  • 8. A method comprising the computer-implemented steps of: gathering statistics by a database server about nodes that are stored in a database repository that is managed by the database server;wherein said nodes form a hierarchy;wherein each node is either an XML file or an XML file container;wherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;storing said statistics; andin response to a single request to the database server for access to one or more XML resources from said database repository, before the database server executes said single request, the database server computing a computational cost associated with each of two or more methods of accessing said one or more XML resources from said database repository, based on said statistics;wherein the method is performed by one or more computing devices;wherein the step of computing a computational cost comprises computing a selectivity value for each of one or more predicates, from said request, that contain operators on said database repository; andwherein XML files of said nodes are XML resources, and wherein each of said XML resources is stored, in association with a location of a node in said hierarchy, in a column of a table in said database repository, and wherein an operator contained in at least one of said one or more predicates is an operator that determines whether a particular XML resource can be located in said database repository at a terminal location of a particular specified path, specified in said at least one predicate, through a portion of said hierarchy.
  • 9. The method of claim 1, wherein computing said computational cost of traversing an index comprises computing a computational cost associated with one or more CPUs used for said traversing.
  • 10. The method of claim 1, wherein computing said computational cost of traversing an index comprises computing a computational cost associated with reading data blocks in which portions of said index are stored.
  • 11. The method of claim 1, wherein computing said computational cost of traversing an index comprises computing (a) a computational cost associated with one or more CPUs used for said traversing and (b) a computational cost associated with reading data blocks in which portions of said index are stored.
  • 12. The method of claim 1, wherein said request for access to one or more XML resources from said database repository is a SQL query.
  • 13. The method of claim 1, wherein said database repository is part of a relational database management system.
  • 14. A computer-readable storage medium that stores instructions which, when executed by one or more processors, cause the one or more processors to perform the steps of: gathering statistics by a database server about nodes that are stored in a database repository that is managed by the database server;wherein said nodes form a hierarchy;wherein each node is either an XML file or an XML file container;wherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;storing said statistics; andin response to a request to the database server for access to one or more XML resources from said database repository, the database server computing a computational cost associated with each of two or more methods of accessing said one or more XML resources from said database repository, based on said statistics;wherein the two or more methods of accessing said one or more XML resources from said database repository include accessing said one or more XML resources through an index and accessing said one or more XML resources without using the index;wherein XML files of said nodes are XML resources, and wherein the step of computing a computational cost comprises (a) computing a selectivity value for each of one or more predicates, from said request, that contain operators on said database repository and (b) computing a computational cost of traversing, to locate a particular XML resource specified in said request, an index in which said XML resources are indexed for accessing said database repository.
  • 15. The computer-readable storage medium of claim 14, wherein the step of gathering statistics comprises gathering one or more data from a group consisting of: a total number of nodes, in said hierarchy, that are accessible via a path through a specified node,a total number of XML file containers, in said hierarchy, that are accessible via a path through said specified node,a total number of nodes, in said hierarchy, that are accessible via a path through said specified node and that are in a level of said hierarchy that is immediately under a level of said specified node,a total number of XML file containers, in said hierarchy, that are accessible via a path through said specified node and that are in a level of said hierarchy that is immediately under said level of said specified node, anda number of levels, from a root node of said hierarchy, at which said specified node is organized in said hierarchy.
  • 16. The computer-readable storage medium of claim 14, wherein the step of storing statistics comprises storing said statistics in a relational table of a database of which said database repository is part.
  • 17. The computer-readable storage medium of claim 16, wherein XML files of said nodes are XML resources, and wherein said relational table is a first relational table that is a different table than a second relational table in which said XML resources are stored in said database repository.
  • 18. The computer-readable storage medium of claim 16, wherein said relational table is a relational table in which said XML resources are stored in said database repository.
  • 19. The computer-readable storage medium of claim 14, wherein XML files of said nodes are XML resources, and wherein the step of storing statistics comprises storing said statistics in a hierarchical index table in which said XML resources are indexed for accessing said database repository.
  • 20. A computer-readable storage medium that stores instructions which, when executed by one or more processors, cause the one or more processors to perform the steps of: gathering statistics by a database server about nodes that are stored in a database repository that is managed by the database server;wherein said nodes form a hierarchy;wherein each node is either an XML file or an XML file container;wherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;storing said statistics; andin response to a single request to the database server for access to one or more XML resources from said database repository, before the database server executes said single request, the database server computing a computational cost associated with each of two or more methods of accessing said one or more XML resources from said database repository, based on said statistics;wherein the step of computing a computational cost comprises computing a selectivity value for each of one or more predicates, from said request, that contain operators on said database repository; andwherein XML files of said nodes are XML resources, and wherein each of said XML resources is stored, in association with a location of a node in said hierarchy, in a column of a table in said database repository, and wherein an operator contained in at least one of said one or more predicates is an operator that determines whether a particular XML resource can be located in said database repository through a particular specified path, specified in said at least one predicate, through a portion of said hierarchy.
  • 21. A computer-readable storage medium that stores instructions which, when executed by one or more processors, cause the one or more processors to perform the steps of: gathering statistics by a database server about nodes that are stored in a database repository that is managed by the database server;wherein said nodes form a hierarchy;wherein each node is either an XML file or an XML file container;wherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;storing said statistics; andin response to a single request to the database server for access to one or more XML resources from said database repository, before the database server executes said single request, the database server computing a computational cost associated with each of two or more methods of accessing said one or more XML resources from said database repository, based on said statistics;wherein the step of computing a computational cost comprises computing a selectivity value for each of one or more predicates, from said request, that contain operators on said database repository; andwherein XML files of said nodes are XML resources, and wherein each of said XML resources is stored, in association with a location of a node in said hierarchy, in a column of a table in said database repository, and wherein an operator contained in at least one of said one or more predicates is an operator that determines whether a particular XML resource can be located in said database repository at a terminal location of a particular specified path, specified in said at least one predicate, through a portion of said hierarchy.
  • 22. The computer-readable storage medium of claim 14, wherein computing said computational cost of traversing an index comprises computing a computational cost associated with one or more CPUs used for said traversing.
  • 23. The computer-readable storage medium of claim 14, wherein computing said computational cost of traversing an index comprises computing a computational cost associated with reading data blocks in which portions of said index are stored.
  • 24. The computer-readable storage medium of claim 14, wherein computing said computational cost of traversing an index comprises computing (a) a computational cost associated with one or more CPUs used for said traversing and (b) a computational cost associated with reading data blocks in which portions of said index are stored.
  • 25. The computer-readable storage medium of claim 14, wherein said request for access to one or more XML resources from said database repository is a SQL query.
  • 26. A method comprising the computer-implemented steps of: gathering, by a database management system, statistics about how many nodes that are stored in a repository of said database management system satisfy certain criteria;wherein said nodes form a hierarchy;wherein each node is either an XML file or an XML file container;wherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;wherein XML files of said nodes are XML resources;storing said statistics in said database management system;the database management system using the statistics to determine how to process a query that accesses one or more XML resources;wherein the method is performed by one or more computing devices; andwherein the step of gathering statistics comprises gathering each of a total number of nodes, in said hierarchy, that are accessible via a path through a specified node,a total number of containers, in said hierarchy, that are accessible via a path through said specified node,a total number of nodes, in said hierarchy, that are accessible via a path through said specified node and that are in a level of said hierarchy that is immediately under a level of said specified node, anda total number of containers, in said hierarchy, that are accessible via a path through said specified node and that are in a level of said hierarchy that is immediately under said level of said specified node.
  • 27. The method of claim 26, wherein the step of storing comprises storing said statistics as an XML data type in a schema-based table in said database management system.
  • 28. A computer-readable storage medium that stores instructions which, when executed by one or more processors, cause the one or more processors to perform the steps of: gathering, by a database management system, statistics about how many nodes that are stored in a repository of said database management system satisfy certain criteria;wherein said nodes form a hierarchy;wherein each node is either an XML file or an XML file container;wherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;wherein XML files of said nodes are XML resources;storing said statistics in said database management system;the database management system using the statistics to determine how to process a query that accesses one or more XML resources;wherein the step of gathering statistics comprises gathering each of a total number of nodes, in said hierarchy, that are accessible via a path through a specified node,a total number of containers, in said hierarchy, that are accessible via a path through said specified node,a total number of nodes, in said hierarchy, that are accessible via a path through said specified node and that are in a level of said hierarchy that is immediately under a level of said specified node, anda total number of containers, in said hierarchy, that are accessible via a path through said specified node and that are in a level of said hierarchy that is immediately under said level of said specified node.
  • 29. A method comprising the computer-implemented steps of: in response to a request for access to one or more XML resources from a database repository within a database management system, accessing, from said database management system, statistics about a structure of a hierarchy associated with said one or more XML resources;wherein nodes form said hierarchy;wherein each node of said hierarchy is either an XML file or an XML file container; andwherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;computing a computational cost associated with each of two or more methods of accessing said one or more XML resources from said database repository, based on said statistics;wherein the two or more methods of accessing said one or more XML resources from said database repository include accessing said one or more XML resources through an index and accessing said one or more XML resources without using the index;wherein the method is performed by one or more computing devices;wherein XML files of said nodes are XML resources, and wherein the step of computing a computational cost comprises (a) computing a selectivity value for each of one or more predicates, from said request, that contain operators on said database repository and (b) computing a computational cost of traversing, to locate a particular XML resource specified in said request, an index in which said XML resources are indexed for accessing said database repository.
  • 30. A computer-readable storage medium that stores instructions which, when executed by one or more processors, cause the one or more processors to perform the steps of: in response to a request for access to one or more XML resources from a database repository within a database management system, accessing, from said database management system, statistics about a structure of a hierarchy associated with said one or more XML resources;wherein nodes form said hierarchy;wherein each node of said hierarchy is either an XML file or an XML file container; andwherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;computing a computational cost associated with each of two or more methods of accessing said one or more XML resources from said database repository, based on said statistics;wherein the two or more methods of accessing said one or more XML resources from said database repository include accessing said one or more XML resources through an index and accessing said one or more XML resources without using the index;wherein XML files of said nodes are XML resources, and wherein the step of computing a computational cost comprises (a) computing a selectivity value for each of one or more predicates, from said request, that contain operators on said database repository and (b) computing a computational cost of traversing, to locate a particular XML resource specified in said request, an index in which said XML resources are indexed for accessing said database repository.
  • 31. A system comprising: one or more hardware processors;means, executing on the one or more hardware processors, for gathering statistics by a database server about nodes that are stored in a database repository that is managed by the database server;means, executing on the one or more hardware processors, for storing said statistics; andmeans, executing on the one or more hardware processors, for computing, in response to a request to the database server for access to one or more XML resources from said database repository and based on said statistics, a computational cost, by the database server, associated with each of two or more methods of accessing said one or more XML resources from said database repository;wherein the two or more methods of accessing said one or more XML resources from said database repository include accessing said one or more XML resources through an index and accessing said one or more XML resources without using the index;wherein said nodes form a hierarchy;wherein each node is either an XML file or an XML file container; andwherein at least one node in the hierarchy is an XML file container that contains a plurality of XML files, each of which contains a plurality of XML elements;wherein XML files of said nodes are XML resources, and wherein said means for computing a computational cost comprises (a) means for computing a selectivity value for each of one or more predicates, from said request, that contain operators on said database repository and (b) means for computing a computational cost of traversing, to locate a particular XML resource specified in said request, an index in which said XML resources are indexed for accessing said database repository.
  • 32. The method of claim 1wherein the step of gathering statistics comprises gathering statistics about at least one of: (a) a median depth of a plurality of paths to a plurality of nodes in said hierarchy, and (b) a maximum depth of a plurality of paths to a plurality of nodes in said hierarchy; andwherein the plurality of nodes are accessible via a path through a specified node.
  • 33. The method of claim 1, wherein the request to the database server for access to one or more XML resources is through a view.
  • 34. The method of claim 1, wherein the request includes one or more predicates and said one or more predicates includes at least one operator from the group of: UNDER_PATH, and EQUALS_PATH.
  • 35. The method of claim 1, wherein a particular predicate of said one or more predicates includes an UNDER_PATH operator;wherein the particular predicate is associated with (a) a depth of infinity, and (b) a particular node; andwherein computing a selectivity value for the particular predicate further comprises: determining a first number of nodes, in said hierarchy, that are accessible via a path through the particular node,determining a second number of nodes, in said hierarchy, that are accessible via a path through a root node of said hierarchy,dividing the first number of nodes by the second number of nodes to produce a third number, andmultiplying the third number by 100 to produce the selectivity value.
  • 36. The method of claim 1, wherein a particular predicate of said one or more predicates includes an UNDER_PATH operator;wherein the particular predicate is associated with (a) a depth of one, and (b) a particular node; andwherein computing a selectivity value for the particular predicate further comprises: determining a first number of nodes, in said hierarchy, that are accessible via a path through the particular node and that are in a level of said hierarchy that is immediately under a level of said particular node,determining a second number of nodes, in said hierarchy, that are accessible via a path through a root node of said hierarchy,dividing the first number of nodes by the second number of nodes to produce a third number, andmultiplying the third number by 100 to produce the selectivity value.
  • 37. The method of claim 1, wherein a particular predicate of said one or more predicates includes an EQUALS_PATH operator; andwherein computing a selectivity value for the particular predicate further comprises: determining a particular number of nodes, in said hierarchy, that are accessible via a path through a root node of said hierarchy,taking the inverse of the particular number of nodes, andmultiplying the inverse of the particular number of nodes by 100 to produce the selectivity value.
  • 38. The method of claim 10, wherein a particular predicate, from said request, includes an UNDER_PATH operator;wherein the particular predicate is associated with (a) a depth of infinity, and (b) a particular node; andwherein computing said computational cost associated with reading data blocks in which portions of said index are stored further comprises: determining a number of XML file containers, in said hierarchy, that are accessible via a path through the particular node to produce said computational cost associated with reading data blocks in which portions of said index are stored.
  • 39. The method of claim 10, wherein a particular predicate, from said request, includes an UNDER_PATH operator;wherein the particular predicate is associated with (a) a depth of one, and (b) a particular node; andwherein computing said computational cost associated with reading data blocks in which portions of said index are stored further comprises: determining a number of XML file containers, in said hierarchy, that are accessible via a path through the particular node and that are in a level of said hierarchy that is immediately under said level of the particular node to produce said computational cost associated with reading data blocks in which portions of said index are stored.
  • 40. A database system comprising: one or more hardware processors;an XML data repository comprising XML files and XML file containers forming a hierarchy;wherein at least one XML file container contains a plurality of XML files, each of which contains a plurality of XML elements; anda database server, executing on the one or more hardware processors, that manages the XML data repository, wherein the database server is configured to: gather statistics about the XML files and the XML file containers,store said statistics,receive a request for access to one or more XML resources from the XML data repository, andcompute a computational cost associated with each of two or more methods of accessing said one or more XML resources from the XML data repository, based on said statistics;wherein the two or more methods of accessing said one or more XML resources from said XML data repository include accessing said one or more XML resources through an index and accessing said one or more XML resources without using the index;wherein said XML files are XML resources, and wherein computing a computational cost comprises (a) computing a selectivity value for each of one or more predicates, from said request, that contain operators on said XML data repository and (b) computing a computational cost of traversing, to locate a particular XML resource specified in said request, an index in which said XML resources are indexed for accessing said XML data repository.
  • 41. A method comprising the computer-implemented steps of: gathering statistics by a database server about XML files and XML file containers;wherein the XML files and XML file containers are hierarchically stored in a database repository that is managed by the database server;receiving a request to the database server for access, through a view, to one or more XML resources;in response to receiving the request, computing a computational cost associated with each of two or more methods of accessing said one or more XML resources, comprising computing a selectivity value, based at least in part on the statistics, for a predicate included in the request; anddetermining a query plan based, at least in part, on the selectivity value;wherein the method is performed by one or more computing devices;wherein computing a computational cost associated with each of two or more methods of accessing said one or more XML resources further comprises computing a computational cost of traversing, to locate a particular XML resource specified in said request, an index in which said one or more XML resources are indexed for accessing said database repository;wherein the two or more methods of accessing said one or more XML resources include accessing said one or more XML resources through an index and accessing said one or more XML resources without using the index.
  • 42. The computer-readable storage medium of claim 14, wherein the request to the database server for access to one or more XML resources is through a view.
  • 43. A computer-readable storage medium that stores instructions which, when executed by one or more processors, cause the one or more processors to perform the steps of: gathering statistics by a database server about XML files and XML file containers;wherein the XML files and XML file containers are hierarchically stored in a database repository that is managed by the database server;receiving a request to the database server for access, through a view, to one or more XML resources;in response to receiving the request, computing a computational cost associated with each of two or more methods of accessing said one or more XML resources, comprising computing a selectivity value, based at least in part on the statistics, for a predicate included in the request; anddetermining a query plan based, at least in part, on the selectivity value;wherein computing a computational cost associated with each of two or more methods of accessing said one or more XML resources further comprises computing a computational cost of traversing, to locate a particular XML resource specified in said request, an index in which said one or more XML resources are indexed for accessing said database repository;wherein the two or more methods of accessing said one or more XML resources include accessing said one or more XML resources through an index and accessing said one or more XML resources without using the index.
US Referenced Citations (310)
Number Name Date Kind
4993025 Vesel et al. Feb 1991 A
5202982 Gramlich et al. Apr 1993 A
5210686 Jernigan May 1993 A
5226137 Bolan et al. Jul 1993 A
5247658 Barrett et al. Sep 1993 A
5257366 Adair et al. Oct 1993 A
5295256 Bapat Mar 1994 A
5295261 Simonetti Mar 1994 A
5307490 Davidson et al. Apr 1994 A
5313629 Abraham et al. May 1994 A
5327556 Mohan et al. Jul 1994 A
5369763 Biles Nov 1994 A
5388257 Bauer Feb 1995 A
5404513 Powers et al. Apr 1995 A
5410691 Taylor Apr 1995 A
5454101 Mackay et al. Sep 1995 A
5463772 Thompson et al. Oct 1995 A
5467471 Bader Nov 1995 A
5499371 Henninger et al. Mar 1996 A
5504892 Atsatt et al. Apr 1996 A
5506991 Curry et al. Apr 1996 A
5524240 Barbara et al. Jun 1996 A
5530849 Hanushevsky et al. Jun 1996 A
5544360 Lewak et al. Aug 1996 A
5546571 Shan et al. Aug 1996 A
5561763 Eto et al. Oct 1996 A
5566331 Irwin, Jr. et al. Oct 1996 A
5568640 Nishiyama et al. Oct 1996 A
5574915 Lemon et al. Nov 1996 A
5625815 Maier et al. Apr 1997 A
5630125 Zellweger May 1997 A
5643633 Telford et al. Jul 1997 A
5680614 Bakuya et al. Oct 1997 A
5682524 Freund et al. Oct 1997 A
5684990 Boothby Nov 1997 A
5689706 Rao et al. Nov 1997 A
5701467 Freeston Dec 1997 A
5724577 Exley et al. Mar 1998 A
5734887 Kingberg et al. Mar 1998 A
5737736 Chang Apr 1998 A
5758153 Atsatt et al. May 1998 A
5802518 Karaev et al. Sep 1998 A
5819275 Badger et al. Oct 1998 A
5822511 Kashyap et al. Oct 1998 A
5832526 Schuyler Nov 1998 A
5838965 Kavanagh et al. Nov 1998 A
5842212 Balluvio et al. Nov 1998 A
5848246 Gish Dec 1998 A
5870590 Kita et al. Feb 1999 A
5878415 Olds Mar 1999 A
5878434 Draper et al. Mar 1999 A
5892535 Allen et al. Apr 1999 A
5897632 Dar et al. Apr 1999 A
5905990 Inglett May 1999 A
5915253 Christiansen Jun 1999 A
5917492 Bereiter et al. Jun 1999 A
5918225 White et al. Jun 1999 A
5921582 Gusack Jul 1999 A
5937406 Balabine et al. Aug 1999 A
5940591 Boyle et al. Aug 1999 A
5960194 Choy et al. Sep 1999 A
5964407 Sandkleiva Oct 1999 A
5974407 Sacks Oct 1999 A
5978791 Farber et al. Nov 1999 A
5983215 Ross et al. Nov 1999 A
5987506 Carter et al. Nov 1999 A
5991771 Falls et al. Nov 1999 A
5999936 Pattison et al. Dec 1999 A
5999941 Andersen Dec 1999 A
6003040 Mital et al. Dec 1999 A
6012067 Sarkar Jan 2000 A
6018747 Burns et al. Jan 2000 A
6023706 Schmuck et al. Feb 2000 A
6023765 Kuhn Feb 2000 A
6029160 Cabrera et al. Feb 2000 A
6029166 Mutalik et al. Feb 2000 A
6029175 Chow et al. Feb 2000 A
6038563 Bapat et al. Mar 2000 A
6052122 Sutcliffe et al. Apr 2000 A
6055544 DeRose et al. Apr 2000 A
6061684 Glasser et al. May 2000 A
6088694 Burns et al. Jul 2000 A
6092086 Martin et al. Jul 2000 A
6101500 Lau Aug 2000 A
6111578 Tesler Aug 2000 A
6112209 Gusack Aug 2000 A
6115741 Domenikos et al. Sep 2000 A
6119118 Kain, III et al. Sep 2000 A
6128610 Srinivasan et al. Oct 2000 A
6141655 Johnson et al. Oct 2000 A
6154741 Feldman Nov 2000 A
6182121 Wlaschin Jan 2001 B1
6185574 Howard et al. Feb 2001 B1
6189012 Mital et al. Feb 2001 B1
6192273 Igel et al. Feb 2001 B1
6192373 Haegele Feb 2001 B1
6199195 Goodwin et al. Mar 2001 B1
6208993 Shadmone Mar 2001 B1
6212512 Barney et al. Apr 2001 B1
6212557 Oran Apr 2001 B1
6230310 Arrouye et al. May 2001 B1
6233729 Campara et al. May 2001 B1
6236988 Aldred May 2001 B1
6240407 Chang et al. May 2001 B1
6247024 Kincaid Jun 2001 B1
6263332 Nasr et al. Jul 2001 B1
6263345 Farrar et al. Jul 2001 B1
6269380 Terry et al. Jul 2001 B1
6269431 Dunham Jul 2001 B1
6279006 Shigemi et al. Aug 2001 B1
6279007 Uppala Aug 2001 B1
6298349 Toyoshima et al. Oct 2001 B1
6301605 Napolitano et al. Oct 2001 B1
6321219 Gainer et al. Nov 2001 B1
6330573 Salisbury et al. Dec 2001 B1
6339382 Arbinger et al. Jan 2002 B1
6341289 Burroughs et al. Jan 2002 B1
6343287 Kumar et al. Jan 2002 B1
6349295 Tedesco et al. Feb 2002 B1
6356920 Vandersluis Mar 2002 B1
6363371 Chaudhuri et al. Mar 2002 B1
6366921 Hansen et al. Apr 2002 B1
6366934 Cheng et al. Apr 2002 B1
6370537 Gilbert et al. Apr 2002 B1
6370548 Bauer et al. Apr 2002 B1
6389427 Faulkner May 2002 B1
6389433 Bolosky et al. May 2002 B1
6393435 Gartner et al. May 2002 B1
6397231 Salisbury et al. May 2002 B1
6418448 Sarkar Jul 2002 B1
6421692 Milne et al. Jul 2002 B1
6427123 Sedlar Jul 2002 B1
6438540 Nasr et al. Aug 2002 B2
6438550 Doyle et al. Aug 2002 B1
6438562 Gupta et al. Aug 2002 B1
6442548 Balabine et al. Aug 2002 B1
6446091 Noren et al. Sep 2002 B1
6449620 Draper et al. Sep 2002 B1
6470344 Kothuri et al. Oct 2002 B1
6487546 Witkowski Nov 2002 B1
6496842 Lyness Dec 2002 B1
6519597 Cheng et al. Feb 2003 B1
6529901 Chaudhuri et al. Mar 2003 B1
6539398 Hannan et al. Mar 2003 B1
6542898 Sullivan et al. Apr 2003 B1
6571231 Sedlar May 2003 B2
6574655 Libert et al. Jun 2003 B1
6584459 Chang et al. Jun 2003 B1
6594675 Schneider Jul 2003 B1
6598055 Keesey et al. Jul 2003 B1
6604100 Fernandez et al. Aug 2003 B1
6609121 Ambrosini et al. Aug 2003 B1
6611843 Jacobs Aug 2003 B1
6615203 Lin et al. Sep 2003 B1
6636845 Chau et al. Oct 2003 B2
6643633 Chau et al. Nov 2003 B2
6662342 Marcy Dec 2003 B1
6675230 Lewallen Jan 2004 B1
6681221 Jacobs Jan 2004 B1
6684227 Duxbury Jan 2004 B2
6697805 Choquier et al. Feb 2004 B1
6704739 Craft et al. Mar 2004 B2
6704747 Fong Mar 2004 B1
6708186 Claborn et al. Mar 2004 B1
6718322 Brye Apr 2004 B1
6721723 Gibson et al. Apr 2004 B1
6725212 Couch et al. Apr 2004 B2
6732222 Garritsen et al. May 2004 B1
6754661 Hallin et al. Jun 2004 B1
6772350 Belani et al. Aug 2004 B1
6778977 Avadhanam et al. Aug 2004 B1
6785673 Fernandez et al. Aug 2004 B1
6795821 Yu Sep 2004 B2
6801224 Lewallen Oct 2004 B1
6826568 Bernstein et al. Nov 2004 B2
6826727 Mohr et al. Nov 2004 B1
6836778 Manikutty et al. Dec 2004 B2
6836857 Ten-Hove et al. Dec 2004 B2
6871204 Krishnaprasad et al. Mar 2005 B2
6901403 Bata et al. May 2005 B1
6915304 Krupa Jul 2005 B2
6920457 Pressmar Jul 2005 B2
6947927 Chaudhuri et al. Sep 2005 B2
6964025 Angiulo et al. Nov 2005 B2
7031956 Lee et al. Apr 2006 B1
7043487 Krishnamurthy et al. May 2006 B2
7043488 Baer et al. May 2006 B1
7113936 Michel et al. Sep 2006 B1
7120645 Manikutty et al. Oct 2006 B2
7139746 Shin et al. Nov 2006 B2
7139749 Bossman et al. Nov 2006 B2
7162485 Gottlob et al. Jan 2007 B2
7171404 Lindblad et al. Jan 2007 B2
7171407 Barton et al. Jan 2007 B2
7174328 Stanoi et al. Feb 2007 B2
7194462 Riccardi et al. Mar 2007 B2
7216127 Auerbach May 2007 B2
7228312 Chaudhuri et al. Jun 2007 B2
7315852 Balmin et al. Jan 2008 B2
7386568 Warner et al. Jun 2008 B2
7433885 Jones Oct 2008 B2
20010037345 Kiernan et al. Nov 2001 A1
20010049675 Mandler et al. Dec 2001 A1
20020015042 Robotham et al. Feb 2002 A1
20020035606 Kenton Mar 2002 A1
20020038358 Sweatt, III et al. Mar 2002 A1
20020056025 Qiu et al. May 2002 A1
20020073019 Deaton Jun 2002 A1
20020078068 Krishnaprasad et al. Jun 2002 A1
20020087596 Lewontin Jul 2002 A1
20020116371 Dodds et al. Aug 2002 A1
20020116457 Eshleman et al. Aug 2002 A1
20020120685 Srivastava et al. Aug 2002 A1
20020123993 Chau et al. Sep 2002 A1
20020124100 Adams Sep 2002 A1
20020133484 Chau et al. Sep 2002 A1
20020143512 Shamoto et al. Oct 2002 A1
20020152267 Lennon Oct 2002 A1
20020156772 Chau et al. Oct 2002 A1
20020156811 Krupa Oct 2002 A1
20020167788 Lee et al. Nov 2002 A1
20020184188 Mandyam et al. Dec 2002 A1
20020184401 Kadel, Jr. et al. Dec 2002 A1
20020188613 Chakraborty et al. Dec 2002 A1
20020194157 Zait et al. Dec 2002 A1
20020198874 Nasr et al. Dec 2002 A1
20030004937 Salmenkaita et al. Jan 2003 A1
20030009361 Hancock et al. Jan 2003 A1
20030014397 Chau et al. Jan 2003 A1
20030065659 Agarwal et al. Apr 2003 A1
20030069881 Huttunen Apr 2003 A1
20030078906 Ten-Hove et al. Apr 2003 A1
20030084056 DeAnna et al. May 2003 A1
20030093672 Cichowlas May 2003 A1
20030101194 Rys et al. May 2003 A1
20030105732 Kagalwala et al. Jun 2003 A1
20030131051 Lection et al. Jul 2003 A1
20030140308 Murthy et al. Jul 2003 A1
20030158897 Ben-Natan Aug 2003 A1
20030163519 Kegel et al. Aug 2003 A1
20030167277 Hejlsberg et al. Sep 2003 A1
20030172135 Bobick et al. Sep 2003 A1
20030177341 Devillers Sep 2003 A1
20030182276 Bossman et al. Sep 2003 A1
20030182624 Large Sep 2003 A1
20030212662 Shin et al. Nov 2003 A1
20030212664 Breining et al. Nov 2003 A1
20030226111 Wirts et al. Dec 2003 A1
20040010752 Chan et al. Jan 2004 A1
20040043758 Sorvari et al. Mar 2004 A1
20040044659 Judd et al. Mar 2004 A1
20040064466 Manikutty et al. Apr 2004 A1
20040083209 Shin Apr 2004 A1
20040088320 Perry May 2004 A1
20040088415 Chandrasekar et al. May 2004 A1
20040103105 Lindblad et al. May 2004 A1
20040103282 Meier et al. May 2004 A1
20040128296 Krishnamurthy et al. Jul 2004 A1
20040143581 Bohannon et al. Jul 2004 A1
20040148278 Milo et al. Jul 2004 A1
20040163041 Engel Aug 2004 A1
20040167864 Wang et al. Aug 2004 A1
20040176958 Salmenkaita et al. Sep 2004 A1
20040177080 Doise et al. Sep 2004 A1
20040205551 Santos Oct 2004 A1
20040210573 Abe et al. Oct 2004 A1
20040215626 Colossi et al. Oct 2004 A1
20040220912 Manikutty et al. Nov 2004 A1
20040220927 Murthy et al. Nov 2004 A1
20040220946 Krishnaprasad et al. Nov 2004 A1
20040225680 Cameron et al. Nov 2004 A1
20040230667 Wookey Nov 2004 A1
20040230893 Elza et al. Nov 2004 A1
20040236762 Chaudhuri et al. Nov 2004 A1
20040255046 Ringseth et al. Dec 2004 A1
20040260683 Chan et al. Dec 2004 A1
20040267760 Brundage et al. Dec 2004 A1
20040268244 Levanoni et al. Dec 2004 A1
20050004907 Bruno et al. Jan 2005 A1
20050010896 Meliksetian et al. Jan 2005 A1
20050027701 Zane et al. Feb 2005 A1
20050038688 Collins et al. Feb 2005 A1
20050050016 Stanoi et al. Mar 2005 A1
20050050058 Jain et al. Mar 2005 A1
20050050092 Jain et al. Mar 2005 A1
20050065949 Warner et al. Mar 2005 A1
20050091188 Pal et al. Apr 2005 A1
20050097084 Balmin et al. May 2005 A1
20050120031 Ishii Jun 2005 A1
20050138047 Liu et al. Jun 2005 A1
20050203933 Chaudhuri et al. Sep 2005 A1
20050228786 Murthy et al. Oct 2005 A1
20050228791 Thusoo et al. Oct 2005 A1
20050228792 Chandrasekaran et al. Oct 2005 A1
20050228818 Murthy et al. Oct 2005 A1
20050229158 Thusoo et al. Oct 2005 A1
20050257201 Rose et al. Nov 2005 A1
20050289125 Liu et al. Dec 2005 A1
20050289175 Krishnaprasad et al. Dec 2005 A1
20060021246 Schulze et al. Feb 2006 A1
20060031204 Liu et al. Feb 2006 A1
20060031233 Liu et al. Feb 2006 A1
20060074901 Pirahesh et al. Apr 2006 A1
20060129584 Hoang et al. Jun 2006 A1
20070011167 Krishnaprasad et al. Jan 2007 A1
20070043696 Haas et al. Feb 2007 A1
20070083809 Tarachandani et al. Apr 2007 A1
20070271305 Chandrasekar et al. Nov 2007 A1
20080091623 Idicula et al. Apr 2008 A1
20080222087 Balmin et al. Sep 2008 A1
Foreign Referenced Citations (11)
Number Date Country
856803 Aug 1998 EP
1 241589 Sep 2002 EP
WO 9746956 Dec 1997 WO
WO 0014632 Mar 2000 WO
WO 0049533 Aug 2000 WO
WO 0159602 May 2001 WO
WO 0142881 Jun 2001 WO
WO 0161566 Aug 2001 WO
WO 03027908 Apr 2003 WO
WO 03107576 Dec 2003 WO
WO 2006026534 Mar 2006 WO
Related Publications (1)
Number Date Country
20050240624 A1 Oct 2005 US