text:
|Numķro de publication
|Type de publication
|Numķro de demande
|Date de publication
|27 dķc. 2011
|Date de dķp¶t
|6 fķvr. 2009
|Date de prioritķ
|2 ao¹t 2006
|╔tat de paiement des frais
|Autre rķfķrence de publication
|Numķro de publication
|Andrew Lamb, Mitch Cherniack, Shilpa Lawande, Nga Tran
|Cessionnaire d'origine
|Hewlett-Packard Development Company, L.P.
|Exporter la citation
|BiBTeX, EndNote, RefMan
|Citations de brevets (35), Citations hors brevets (124), Rķfķrencķ par (40), Classifications (6), ╔vķnements juridiques (5)
|Liens externes: USPTO, Cession USPTO, Espacenet
This application is a continuation-in-part application of, and claims priority to, U.S. patent application Ser. No. 11/461,937, entitled Optimizing Snowflake Schema Queries, to inventors Cherniack, et al., which was filed on Aug. 2, 2006. The disclosure of the above application is incorporated herein by reference in its entirety.
Conventional database systems were developed in the 1970's to deal with applications in which workloads were dominated by writes. Consider a bank in which a teller initiates high-priority database transactions. Each transaction's goal is to reflect customer withdrawals and deposits quickly and accurately in the database. Applications of this nature are sometimes characterized by the term On-Line Transaction Processing (OLTP). OLTP is concerned more with making writes fast than with expediting reads. These applications typically need access to the most-current data. Row stores are a response to this need.
In contrast, there is another class of applications in which the workload is dominated by read operations. These applications tend to occur in decision-support settings. Consider a buyer for a large retail chain. Such a user is concerned with looking for patterns and trends in historical data in order to forecast what items might sell well in the future. Applications of this type are sometimes characterized by the term On-Line Analytical Processing (OLAP). OLAP is concerned more with read speed than with write speed. Data warehouses, in general, are a response to this need. Column stores (described in a later section) are a special class of hyper-fast data-warehouse system.
In many cases, OLAP does not need the most-current data. A typical deployment may load the current day's data at night, making the database for OLAP as much as twenty-four hours out of date. Since the applications are more concerned with historical trends, this is acceptable in a lot of cases.
Data-warehouse systems have been developed to deal with OLAP applications. Data warehouses are typically very big. It is common for a data warehouse to involve 10 to 100 terabytes of data. In order to make managing these massive data sets more tractable, data warehouse systems have taken advantage of the typical data relationships that are found in these applications. The next few sections describe these relationships.
Table Roles in Data Warehouses
Typically there is one very big table that accumulates the history of the important events in the application. New events are frequently appended to this table, which is commonly called the fact table. As an example, consider a data warehouse for a large retail chain. The fact table may contain one record for each item that is bought at one of the many stores. In other words, each scanning operation at a point-of-sale terminal would generate one record in the fact table.
Each purchase can be described along many dimensions. For example, a given purchase can be described in terms of the store at which it was bought. If queries seek, say, all purchases that were made in New York, information about each transaction's location has to be stored. However, rather than store this and other such descriptive information with each record in the fact table—and thereby make the fact table huge—such information is typically factored out into separate tables called dimension tables. The primary key of each dimension table—i.e., the attribute (or, occasionally, set thereof) that the database management system prevents from having the same value in more than one of that dimension table's records—is embedded in the fact table. We call the embedded primary key a foreign key in the context of the fact table. Thus, answering questions about purchases in a given state would involve a join of the fact table with the dimension table called Store on the corresponding primary-key/foreign-key attributes.
Schemas that have this primary-key/foreign-key relationship between one fact table and many dimension tables are referred to as star schemas since such a schema can be represented graphically by a central fact-table node connected to surrounding dimension-table nodes by edges that represent a primary-key/foreign-key joins. In a star schema, the dimension tables are not connected to each other directly. The embedded key relationship between the fact table and a dimension table is necessarily an n-to-one relationship. So the join of the fact table with a dimension table has only as many rows as there are rows in the fact table.
Sometimes, a dimension table can be further qualified by additional dimension tables. A good example of this is a dimension table called "State" that has fifty rows and that has information like the state's population, and another dimension table, called "County," that includes one row for each county for each state. The County table would include the State table's primary key as one of its (foreign-key) attributes. The County table may contain further descriptors, like mean family income. This would be handled in much the same way as the fact-to-dimension relationships described above, i.e., by embedding foreign keys in the obvious way. This generalization of a star schema is called a snowflake schema because of the clear geometric analogy.
Another way to view this employs a graph representation of the schema. We can think of the foreign-key-to-primary-key relationship expressed in a schema S as describing a directed graph G=(V, E) in which the vertices V are S's relations and the edges E are of the form (Ri, Rj), where Ri contains a foreign key and Rj contains the corresponding primary key. Ri is the source vertex, and Rj is the sink vertex. A schema that can be depicted as a graph in which one vertex F has no incoming edge and in which each other node has only a single incoming edge (i.e., tree graph) is called a snowflake schema. If the longest path in such a schema graph is of length one, then we call the schema a star schema. This kind of graph-based schema representation will come up again later.
Although the applicability of the invention to be described below is not limited to any particular physical database layout, some of its advantages will be particularly manifest when it is applied to databases implemented as "column stores." A column store differs from the more traditional row-store architecture in that data in a column store are stored on disk clustered by column rather than by row.
Horizontal data storage has been the traditional physical-storage approach, in part because it makes initial storage of an individual record relatively fast; to store a given record usually requires access only to, say, a single disk block. But there are a great many databases in which reading occurs much more frequently than writing. For such databases, it is often better for the physical layout to be vertical, as FIG. 1's column store 24 depicts: successive storage locations are occupied by different records' values of the same attribute. Unlike row store 22, which would typically store the entire table in a single file, a column store 24 is usually implemented by storing each column in one or more separate files. Thus, there is a file for the Emp# column, with values appearing in the order first row, second row, third row, etc., a file for the Dept column, with values also appearing in the order first row, second row, third row, etc., and so on.
One reason why a vertical storage arrangement is preferable for data reading is that fetching the results of a query requires access to only enough, say, disk blocks to contain the values of the attributes of interest; there is no need to access enough disk blocks to contain all of the attributes of all of the records that meet the query criteria.
A key physical-database-design choice for both row stores and column stores is the order in which rows or columns are stored. For example, FIG. 1's table 20 may be ordered in a row store on attribute Room, in which case the first row in the table (Room=101) would be followed by the third row (Room=105) followed by the second row (Room=203). The choice of sort order strongly influences both query and update performance. For example, if table 20 is physically sorted on Room, then queries that include predicates on Room can be evaluated without scanning the entire table, either with a binary search, or more commonly, by using a sparse index that typically is placed over the sort attribute. A common choice of sort order for a table in a row store is that of its primary key, since this facilitates insertions and updates that must be accompanied by checks for violations of key constraints.
A query is a request for data. All DBMSs translate queries into algorithmic access plans that get compiled or interpreted into code that returns the data specified by the query. The process of translating a query into an access plan is called query optimization, and the most common paradigm for query optimization is cost-based query optimization.
Logical-Plan Generation
A query optimizer first transforms a (typically, SQL) query into a logical plan. A logical plan is a tree of logical operations, where a logical operation is a specification of a class of physical operations that all have the same semantics. Each of the logical operations can be realized with potentially different algorithms.
Often, a query optimizer will precede its cost-based step with a query-rewriting step. Query rewriting consists of applying equivalence-preserving transformations to the query expression to arrive at a new expression that is likely to be cheaper to evaluate. The classic example of such a rewrite is pushing predicates below joins in the query expression tree. Applying the predicate first reduces the join inputs' sizes.
An example language for logical plans is the relational algebra, which includes logical operators: join, project, select etc. These operators are "logical" because each is agnostic about the algorithm used to implement it. (e.g., the logical operation join can be implemented with, say, a hash join or sort-merge join).
Another common query-rewriting strategy is to transform a nested query into an equivalent join query, as is usually possible. The importance of this transformation is that it prepares the query for the next step by putting it into a form for which a wealth of further optimizations exist. Join processing has been widely studied, so most optimizers are capable of doing it well.
A Generic Logical-Plan Language
The invention to be described below can be applied to any query optimizer that generates a logical plan distinct from the physical plan. Languages for expressing logical plans are varied, but all share some manifestation of the following key operations, which we will refer to in explaining an embodiment of the invention:
A typical logical plan produced by any query optimizer is an operator tree that, as the
A logical plan is then transformed into a physical plan by mapping each logical operator to physical plan operator that is used to implement it. The process of logical-to-physical-plan mapping is typically based on cost-based decisions and is briefly described next.
Given a query q, cost-based query optimization follows the following three steps to produce an access plan for q:
For row-store systems, query optimization typically focuses on two concerns that are reflected in the candidate access plans considered for a given query:
For queries with joins of at most two tables, index selection effectively determines the candidate access plan, and for queries with more-complex joins, index selection determines the sub-plans that generate inputs to the joins in candidate access plans.
Now, data-warehouse products are capable of creating and using materialized views. Materialized views are typically used to store materialized aggregates or rollups on popular dimensions. Although some materialized views contain computed entries, such as averages, some contain only entries that can be found in the database's logical tables. We refer to materialized views of the latter type as "projections." For a column store that stores overlapping projections in varying sort orders, the primary concern of query optimization (analogous to concern #1 for row stores) is choosing the projections used to evaluate the query. Therefore, the sort orders in which columns are stored heavily influence the cost of evaluating the query.
For a query with more than two joins, the optimizer must determine the best order for evaluating them. Join processing in relational databases proceeds by examining possible join orders and comparing their expected costs relative to a cost model. We call this step join enumeration. A join of n tables is processed by applying a binary join operator n−1 times. Thus, a join-evaluation order can be represented as a binary tree in which each interior node is a join operator, and each leaf node is a base relation. The left argument to the join is called the outer relation, and the right argument is called the inner relation to reflect the role that they play in the natural looping structure of join algorithms.
The most expensive phase of query optimization is the join-enumeration phase. Because join operators are binary, there are O(n!*Cn) different join orders that could be considered, given n tables to be joined. Here, Cn refers to the nth Catalan number, which is equivalent to 2n!/((n+1)!*n!) for n>=0. Note that O(n!*Cn) is an exceptionally fast-growing function, as evidenced by the following table of values of both factors for selected values of n:
It is impractical to assess that many plans for all but trivial values of n, so a query optimizer must somehow prune the space of join orderings that are considered. A good query optimizer is therefore one that can so prune this search space as to ensure that the remaining plan set includes good orderings. Given a cost model that is reasonably accurate, a query optimizer can exhaustively search that plan set to find good plans.
There is a fundamental tradeoff between the time spent in producing an optimized query plan and the quality of the result. For complex queries, the search space that could be explored by the optimizer is potentially huge. Exhaustively enumerating this entire space may take so long as to be prohibitive. Therefore, it is common for optimizers to limit the search space in some way. In fact, the IBM DB2 optimizer ("IBM Universal Database for Linux, Unix, and Windows," Product Manuals, http://www-306.ibm.com/software/data/db2/udb/support/manualsv7.html) currently gives the user a choice over ten different optimization levels. Choosing a lower level restricts the amount of effort that the optimizer will expend. By choosing an optimizer level the user can decide how thoroughly the space of possible plans should be explored. This choice may be based on the perceived expense of the query or on how many times the query will be executed.
The state of the art in space-pruning for join enumeration can be summarized as follows:
Common wisdom is that, with dynamic programming and the left-deep restriction on the search space, a query optimizer can exhaustively examine join orderings for queries consisting of twelve to fifteen tables within a reasonable time frame. For any query that targets more tables than this, the optimizer will need to time out before the search space has been examined exhaustively and to select the best plan seen before it timed out. Thus, the greater the number of tables in the query beyond, say, fifteen, the closer the query optimizer comes to being random in its join-order selection. In short, a serious limitation of state-of-the-art query optimization lies in its inability to scale to the large numbers of tables that queries for data-warehousing applications commonly target.
An alternative join-enumeration strategy involves considering all join plans rather than just those that are left-deep. Join plans that are not just left-deep or right-deep are "bushy" join plans, which
Ono and Lohman ("Measuring the Complexity of Join Enumeration in Query Optimization," Proceedings of the 16th VLDB Conference, Brisbane, Australia, Aug. 13-16, 1990) showed that pruning non-optimal plans dynamically by using a strategy similar to dynamic programming reduces the space of bushy plans that needs to be considered from O(n!*Cn) to O(3n). For large numbers of relations, this space is very large; the number of possible bushy join plans for seven tables is 665,280, for example. This suggests that any attempt to evaluate such a plan space should employ a very lightweight approach.
Still, such plans are sometimes better than any of the left-deep plans. Such cases can arise when several of the joins are highly selective. Consider a query that joins four large tables A, B, C, and D. Suppose that the join predicates are A.X=B.X, C.Y=D.Y, and B.Z=C.Z, that the first two are very selective (produce small results), and that the third is not. Then a bushy join plan is likely superior to any left-deep plan, because it will properly take advantage of the smaller intermediate results to make the top join very cheap.
Vance and Maier ("Rapid Bush Join-Order Optimization with Cartesian Products," Bennet Vance and David Maier, Proceedings of the 1996 ACM SIGMOD International Conference on Management of Data, Montreal, Quebec, Canada, Jun. 4-6, 1996) considered relaxing the left-deep-join-tree assumption by allowing bushy plans in the search space. They suggested an efficient method for enumerating bushy plans.
In general, one aspect of the subject matter described in this specification can be embodied in a method that includes determining, for a database query that does not represent a snowflake schema, a graph comprising (a) vertices each representing a table joined in the query, (b) a directed edge between each pair of vertices of which a first vertex represents a first table and a second vertex represents a second table that is joined in the query with the first table, each of the edges representing one of an outer join and an inner join; determining, for the graph, a directed spanning tree that (a) represents an ordering of joins in the query and includes all outer join edges in the graph, (b) does not include a first subtree having an outer join edge directed from a first vertex to a second vertex, and an inner join edge directed from the second vertex to a third vertex, (c) does not include a second subtree having an outer join edge directed from a fourth vertex to a fifth vertex, and another outer join edge directed from the fourth vertex to a sixth vertex; and the spanning tree being a sufficient basis for a physical plan to obtain data records that satisfy the query. Other embodiments of this aspect include corresponding systems, apparatus, and computer program products.
These and other embodiments can optionally include one or more of the following features. Determining the directed spanning tree can comprise, for a selected one of the vertices, determining the spanning tree for the graph that is rooted at the selected vertex. Determining the directed spanning tree can be performed iteratively. Each selected vertex can have an indegree of vertices that is less than or equal to an indegree of vertices for each of the vertices that have not been selected. An indegree of vertices of the selected vertex can be equal to an indegree of vertices of one of the vertices that has not been selected. A table represented by the selected vertex can have a cardinality that is greater than or equal to a cardinality for a table represented by each of the plurality of vertices that have not been selected.
Determining the directed spanning tree can further comprise determining spanning trees for the graph in which each spanning tree is rooted at a same vertex in the graph; and selecting a spanning tree from the spanning trees as the determined spanning tree, where the selected spanning tree satisfies the constraints and whose product of join selectivities of joins denoted by edges of the selected spanning tree is less than or equal to the corresponding selectivity products for unselected spanning trees. If an edge represents an inner join between the first table and the second table on a foreign key of the first table and a primary key of the second table, the edge is directed from the first vertex to the second vertex. If an edge represents an outer join between the first table and the second table, the edge is directed from the first vertex to the second vertex if the edge represents a left outer join, otherwise if the edge represents a right outer join, the edge is directed from the second vertex to the first vertex. One or more distinct snowflake schemas in the spanning tree can be identified. For each of the snowflake schemas, a respective access plan for obtaining data requested by the query for tables represented by vertices in the snowflake schema can be determined. Data can be obtained by executing each snowflake schema's respective access plan.
Particular embodiments of the subject matter described in this specification can be implemented to realize one or more of the following advantages. The scope of queries that can be optimized is expanded beyond queries that only represent snowflake schemas. We have developed a way of generating logical access plans for queries over data warehouses that tends to be scalable and considers a search space that is not in general restricted only to left-deep join trees. The invention finds its principal but not exclusive application in determining access plans for queries that, when applied to the databases that they target, define a plurality of independent snowflake schemas. In accordance with the invention, the plan generator computes, separately for each of the independent snowflake schemas, a constituent logical access plan for obtaining from that schema's tables a record set that includes the data requested by the query from those tables. Additionally, the plan generator determines a plan for obtaining the query's results from the record sets that will be produced by executing the "subplans" thus computed, and this operation may, for example, be the traditional dynamic-programming join-ordering algorithm. So the space of plans that is considered depends on the query graph's topology. But the operation differs from that of, e.g., Vance and Maier in that the set of allowed bushy plans is limited in accordance with the relationships among the fact tables in the query.
This approach to plan generation can scale to many more tables than the state-of-the-art approach does. In essence, this is because it partitions the set of tables for which a plan must be constructed, and the record sets generated by executing the subplans for the different partitions' queries are treated as the table inputs to the final plan-generation operation. So, if every partition consisted, for example, of five to six tables, this approach could in a reasonable amount of time generate a good plan for queries of seventy-five tables or more.
In some embodiments, the approach used to determine each of the constituent plans is "greedy" in the sense that the criterion used to select tables to be joined at a given stage in the query's execution is independent of selections made for any subsequent stage. Use of the resultant "lightweight" plan-selection operations contributes to scalability.
To design each constituent, snowflake-schema-based plan, some embodiments will nest an operation they use to design plans for simple star schemas. This approach begins by identifying each of the snowflake schema's dimension tables that is qualified by one or more further dimension tables of which none is so qualified. Each table thus identified is then treated as the root of a simple star schema—i.e., its incoming edge is temporarily ignored—and the plan-generation technique applicable to simple star schemas is applied to the resulting schema. If that qualified dimension table itself qualifies a further dimension table, the record set that will result from the just-designed plan's execution is then treated as a dimension table in a star schema that results from ignoring the further dimension table's incoming edge, and a plan is designed for that star schema. This continues until the snowflake schema's fact table is qualified only by dimension tables that are not further qualified or that are the roots of snowflake schemas for which plans have been designed, and the star-schema plan-design technique is applied to the star schema that the fact table forms with those unqualified dimension tables and the record sets that result from executing the plans designed for the lower-level snowflake schemas.
The invention works particularly well on column-store databases. As will be seen below, it readily lends itself to taking advantage of materialized views that the database may provide, particularly materialized views that are pre-computed joins (as opposed to pre-computed aggregates). A join materialized view has the advantage that it is very general and can be used to process a large number of queries that use that join. With star schemas, a query will contain as many joins as there are required dimensions. This could be a fairly large number. Eliminating them from the query-processing cost is a big advantage. But materializing the join of two or more relations conceptually creates a wide row, and a row store would have to store these wide tuples in each disk block and thereby exacerbate the problem of having to read more data than a given query might need. In contrast, the wide tuple does not present such a problem in a column store.
The details of one or more embodiments of the invention are set forth in the accompanying drawings and the description below. Other features, aspects, and advantages of the invention will become apparent from the description, the drawings, and the claims.
The present invention's teachings are applicable to a wide range of database systems implemented in essentially any type of computer system. An example is the computer system that
The processor may be dedicated to DBMS operations, or it may additionally execute processes directed to other functions, and the memory space made available to DBMS operations may be "virtual" in the sense that it may actually be considerably larger than the RAM 34 provides. So the RAM's contents may be swapped to and from a system disk 42, which in any case may additionally be used instead of a read-only memory to store instructions and permanent data. The actual physical operations performed to access some of the most-recently visited parts of the process's address space often will actually be performed in the cache 30 or in a cache on board microprocessor 28 rather than in the RAM 34. Those caches would swap data and instructions with the RAM 34 just as the RAM 34 and system disk 42 do with each other.
In any event, the ROM 40 and/or disk 42 would usually provide persistent storage for the instructions that configure such a system to optimize query execution in the manner that will be explained below, but the system may instead or additionally receive them through a communications interface 44, which receives them from a remote server system. The electrical signals that typically carry such instructions are examples of the kinds of electromagnetic signals that can be used for that purpose. Others are radio waves, microwaves, and both visible and invisible light.
Of course, few computer systems that implement the present invention's teachings will be arranged in precisely the manner that
Independently of whether the host system is a single-processor system or a multi-node network, it will need to determine an execution plan to use in responding to queries, and it does so in a way that will now be explained by reference to an illustrative embodiment of the invention.
As will be explained below in more detail, the illustrated embodiment operates in three phases. In the first phase, which FIG. 7's block 54 represents, it rewrites the original (typically SQL) query into an "anchor query" (defined below) and a set of (again, typically SQL) "snowflake subqueries" (also defined below). Each of the snowflake subqueries contains some disjoint subset of the tables in the original query's FROM clause, as will be explained below by reference to an example.
A snowflake subquery is so named because the primary-to-foreign-key relationships of the tables it queries define a snowflake schema. A degenerate case of a snowflake subquery is a star subquery, whose tables form a star schema.
The anchor query joins the results produced by the snowflake subqueries into a result equivalent to that produced by the original query. Taken together, query rewriting 54 transforms the original SQL query into an equivalent SQL query that consists of the anchor query, with the snowflake subqueries as the nested inputs in its FROM clause.
In the second phase, which block 56 represents, the optimizer uses what in the illustrated embodiment is a lightweight plan-generation algorithm to produce a respective query subplan from each snowflake subquery. In the final phase 58, the optimizer generates the final logical plan for the anchor query by using any appropriate cost-based techniques (e.g., left-deep trees and dynamic programming) but treating each record set produced by a snowflake subquery's execution as a single table. The overall result is that the optimizer is not limited to considering only one shape of join tree. It may, for instance, consider a space that comprises plans that define self-similar left-deep trees such as the one that
To illustrate the
As background, we will define a useful normal form for predicates. Attribute A of relation R is named by writing R.A. Relational operators include <, >, <=, >=, and =, and we denote them as <relop>. A predicate of the form <attribute-name> <relop> <attribute-name> or <attribute-name> <relop> <constant> is called a simple predicate. Simple predicates can be combined with Boolean operators (AND, OR, NOT) to form a complex predicate. NOT may appear only directly in front of an simple predicate (as in "NOT (R.A=6)"). Conjunctive Normal Form ("CNF") is a complex predicate that is written as a conjunction of clauses in which each clause is a disjunction of simple predicates. For example, if A, B, C, D, and E are all simple predicates, then (A OR B) AND (NOT(B) OR C OR NOT(D)) AND (D OR NOT(E)) is in CNF. It can be shown that every complex predicate can be converted to CNF.
1) Join Tables: These are the tables that appear in the FROM clause of the SQL query. For Q, these are tables F1, F2, F3, D1, D2, D3, D4, D5, and D6.
2) Predicates: These are the conjoined predicates in the WHERE clause. The predicates are of three types:
Step 1: Query Rewriting
The illustrated optimization algorithm's query-rewriting step represented by FIG. 7's block 54 takes a
Note that this operation requires that the optimizer recognize primary-key/foreign-key relationships. This is possible because the database-designing user ordinarily declares those relationships in order to enable the DBMS to enforce referential integrity. If the designer fails to declare some such relationship, the illustrated optimizer will still work, although not as effectively. If the relationship depicted in
As FIG. 12's block 62 indicates, each partition is then used to create a snowflake subquery. When this step is applied to the
Finally, the anchor query that connects the snowflake subqueries is constructed, as FIG. 12's block 64 indicates. In the example, the resultant anchor query is the one that
Step 2: Snowflake Subquery Plan Generation
Having thus completed the query-rewriting operation that FIG. 7's block 54 represents the optimizer enters its second, block-56 phase, in which it uses a "lightweight" algorithm to generate a plan for each snowflake subquery. (This algorithm is lighter in weight than, e.g., state-of-the-art join enumeration because it applies a greedy heuristic to choose a join order, with the result that the amount of time required to make the choice increases only linearly with the number of projections considered for the query, and that number is less than or equal to the number of materialized views actually available.)
To explain this algorithm we first assume that its snowflake-subquery inputs are all simple star subqueries, as the example subqueries Q1, Q2, and Q3 all are. We will thereafter explain how the algorithm as thus described is extended to handle snowflake subqueries that are not necessarily star subqueries.
We also digress briefly to note that there is a large volume of work (e.g., Baralis, Paraboschi, Teniente, "Materialized View Selection in a Multidimensional Database," in Proceedings of the 23th VLDB Conference, Athens, Greece, 1997, and H. Gupta and I. S. Mumick, "Selection of Views to Materialize under a Maintenance-Time Constraint," International Conference on Database Theory (ICDT), 1999) that investigates how to decide which aggregate views should be materialized and therefore which views to use in processing a query.
The snowflake-subquery plan-generator algorithm (hereafter called "Algorithm Snowflake") that will now be described by reference to the pseudocode of
For any set of tables Ts used in a query Q, a projection P is said to cover Ts if P includes a respective column for every attribute that appears in Q and belongs to a table in Ts. But P need not include the attributes that occur only in Q's join predicates that join tables in Ts. To illustrate, consider the projections shown in
An Example Cost Model: FIG. 15's snowflake-subquery plan-generation algorithm assumes the existence not only of some set of projections but also of a cost model that is used to choose among those projections. Typically, a cost model includes a set of formulas that can be used to map any query plan to its expected cost. By applying these formulas to all candidate plans, the plan can be ranked from least to most expensive, and plan choices can be made accordingly. To keep the explanation simple, we present the cost model below in terms of the decision procedure it implies rather than as a set of formulas.
To understand this cost model, we need to introduce one additional concept. Predicates in a SQL WHERE clause are applied to a set of records. Those records for which the predicate is true are returned as the result set R. A predicate that returns very few records is said to be highly selective. One measure of the selectivity of a predicate applied to a set of records S is what we refer to as a "selection coefficient," |R|/|S|: the lower the selection coefficient, the greater the selectivity is.
We use the simple cost model below to trace the steps of the snowflake-subquery plan-generation algorithm on an example query. It is important to note that this algorithm's applicability does not depend on the choice of actual cost model; the model described here is meant only to serve as an example.
1. Ranking Candidate Projections for the Anchor Projection: For each subquery Q's plan, a projection is chosen as the "anchor" projection, whose purpose will become apparent below. FIG. 15's block 66 represents making that choice. If only one existing projection by itself covers the fact table F in the snowflake defined by the subquery Q whose subplan is being determined, that projection is the one chosen as that subplan's anchor projection. If there is more than one such projection, we choose one of them as the anchor projection according to the following rules:
Ranking Restriction Predicates: In an operation that FIG. 15's block 70 represents, a left-deep join tree is constructed for the subquery. The anchor projection is the tree's leftmost leaf. To place the dimension-table-covering-projections in the tree, restriction predicates over a single projection must be ranked. For this example cost model, ranking will be based on the predicates' selectivities. That is, predicates will be placed from bottom to top of the query plan in ascending order of their selection coefficients.
Tracing Subplan Generation over an Example Subquery: To illustrate the
In an operation that FIG. 15's block 66 represents, an anchor projection is chosen that covers fact table F1. Since projections PF1 a, PF1 b, and PF1 c all cover F1, they are all candidate projections. But PF1 a does not additionally cover any dimension table, whereas PF1 b covers D1, and PF1 c covers D2. So, according to the example cost model's rule 1 a, PF1 a is eliminated from contention. This leaves PF1 b, and PF1 c, and, because of the cost model's rule 1 b, PF1 b is chosen; the selection coefficient of D1 (which PF1 b covers) is 0.1 (equal to the selection coefficient of "G=10"), whereas the selection coefficient of D2 (which PF1 c covers) is 0.5 (equal to the selection coefficient of "H>10").
In an operation that FIG. 15's block 68 represents, a projection is chosen to cover the remaining uncovered dimension table, D2. There are two candidate projections; PD2 a and PD2 b both cover D2. But, whereas the selection coefficient of PD2 a is 1 (because Q has no restriction predicate over PD2 a's sort-order attribute, PK2), the selection coefficient of PD2 b is 0.5 (because the "H>10" restriction predicate restricts, with selection coefficient 0.5, the values of PD2 b's sort-order attribute H). So application of the above-described cost model's rule 3 a results in choosing projection PD2 b.
In an operation that FIG. 15's block 70 represents, a left-deep join tree is constructed with anchor projection PF1 b and dimension projection PD2 b.
In an operation that FIG. 15's block 72 represents, a selection operation for every restriction predicate in Q1 is placed just above the appropriate projection. Thus, "σG=10" is placed over PF1 b, and "σH>10" is placed over PD2 b. Since Q1 includes no GROUP BY or ORDER BY clause, the operations that blocks 74 and 76 represent result in no additions to the plan, and the algorithm terminates, leaving the query plan shown in
Extensions of Algorithm Snowflake: The pseudocode shown in
Another extension to Algorithm Snowflake allows for processing of an "almost snowflake" query, whose graph representation is a collection of directed acyclic graphs ("DAGs") rather than a collection of trees.
Step 3: Cost-Based Join Enumeration
The query-optimization algorithm's last step—i.e., the step that FIG. 7's block 58 represents—involves running some cost-based plan-generation algorithm on the anchor query Qa generated in the (block 54) query-rewrite phase. (For example, this step could, but need not, use the well-known approach of enumerating and costing left-deep trees by using dynamic programming.) What is important to note is that the table inputs to the cost-based optimization step are not the original tables of the input query; they are the partitions produced during the rewrite step of the optimization algorithm. Where each partition would appear in the final plan, the snowflake subplan for that partition that was produced in Step 2 of the algorithm is substituted.
As was mentioned above, a complete access plan specifies not only what logical operations are to be performed but also lower-level details such as what join algorithms to use. The system decides these details, too, and the resultant complete plan is executed to obtain the query results and generate output signals that represent those results.
Note that the complexity of cost-based plan generation has been reduced by using multi-table partitions, rather than individual tables, as the input to the plan generator. This means that instead of scaling to twelve to fifteen tables, the algorithm scales to twelve to fifteen partitions (potentially, twenty-five or tables or more, the number depending on how many tables fall in each partition). For example, whereas query Q of
Starifier Algorithm
In this section, we describe the starifier algorithm which expands the scope of queries that can be processed by the optimizer.
Star and snowflake queries have directed join graphs that are directed rooted trees. For any star or snowflake query, q, its corresponding join graph, Jq=(V, E) is defined as follows:
The root of the star or snowflake query join graph is the vertex representing the "fact table". By the definition of star/snowflake schemas, the fact table vertex is the sole vertex with indegree 0 (i.e., no incoming edges).
In general, SQL queries can include joins with arbitrary (non-tree) structure. For example, consider the schema of
Given the schema of
has a DAG structure (because the foreign keys of A and B reference the same relation, C), whereas the SQL query, Q2:
has a cyclic structure because of the cycle of relations (A→C→D→A→ , , , ) whereby each relation has a foreign key that references the next relation in the cycle. The optimizer described above rejects such queries because their join graphs are not rooted directed trees.
The starifier algorithm "converts" the join graphs of such queries into directed rooted trees that can then be processed by the optimizer described above to determine a join ordering. Therefore, the starifier algorithm expands the scope of the optimizer to process queries which include the following types of joins, for instance:
To illustrate the algorithm and the extension of the join graph representation upon which operates, we will use the SQL query shown in
The input to the starifier algorithm is a data structure representing the join structure of the query being processed. Because the algorithm can process queries that include outer joins, this data structure extends the join graph representation assumed by the optimizer. More specifically, the extended join graph, for any query q is the graph J* q=(V, E) such that:
Note that in the case of a query with two relations that are (inner) joined by anything other than a predicate equating the foreign key of one of the relations with the primary key of the other, the vertices representing these two relations in the extended join graph of the query will have two edges connecting them: one in each direction.
In further implementations, the ordering of vertices V is based on an estimated cardinality after all single table predicates are applied. In yet further implementations, the ordering of vertices V is based on the estimated total number of bytes to be read off of storage. That is, an estimated cardinality for a table represented by a vertex is multiplied by the number of bytes per column fetched. For example, assume table 1 has 1000 estimated rows and the columns required for each row require 20 bytes of disk storage, and table 2 has 2000 estimated rows the columns required for each row require 8 bytes of disk storage. This cost model might choose table 2 because it would only require 16,000 bytes from storage whereas table 1 requires reading 20,000 bytes from storage even though table 2 has higher estimated cardinality. Other cost models are possible.
A vertex r is then selected from S according to the order of S wherein r has not been previously selected (step 2402). An attempt is made to determine one or more spanning trees for J* q rooted at r (step 2406). If no spanning tree was found (step 2408), the process continues at step 2404. Otherwise, it is determined whether or not the spanning trees satisfy one or more constraints (step 2410).
In some implementations, the constraints require that a spanning tree:
If more than one spanning tree satisfies the constraints above, a spanning tree can be selected in a number of ways. In some implementations, the spanning tree is selected randomly. In other implementations, the spanning tree is selected based on evaluation of a cost model (step 2412). For example, a spanning tree can be selected whose product of join selectivities of joins denoted by edges of the spanning tree is less than or equal to the corresponding selectivity products for unselected spanning trees. In further implementations, the spanning tree can be selected based on a predicted execution time for the joins represented by the tree. For example, the spanning tree having the minimal estimated execution time is selected. Other cost models are possible.
In some implementations, if no spanning tree is found and there are no more vertices left to try, then E is supplemented with a reverse edge (vj→vi) for every inner join edge in E, vi→vj, where the reverse edge does not already exist, and the steps in 2400 are repeated.
By way of illustration, assume the extended join graph of
Then vertex A is chosen as the initial root vertex. An attempt at finding a spanning tree rooted at A is unsuccessful. So, an attempt at finding a spanning tree rooted at B is tried. There are two directed spanning trees rooted at B and these are shown in
Observe that the spanning tree of
The purpose of the constraints show above is to ensure that the chosen spanning tree constrains the choice of join orders to those that are guaranteed to preserve the semantics of the original query. More specifically, it ensures that for any subtrees of the form shown in
(v i JOIN1v j)JOIN2v k=(v i JOIN2v k)JOIN1v j,
and for any subtree of the form shown in
This is because the optimizer interprets each of these join graphs as specifying that either join expression equated in the associated identity is acceptable in the final join ordering chosen for the query.
Embodiments of the subject matter and the functional operations described in this specification can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Embodiments of the subject matter described in this specification can be implemented as one or more computer program products, i.e., one or more modules of computer program instructions encoded on a computer-readable medium for execution by, or to control the operation of, data processing apparatus. The computer-readable medium can be a machine-readable storage device, a machine-readable storage substrate, a memory device, a composition of matter effecting, or a combination of one or more of them. The term "data processing apparatus" encompasses all apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, or multiple processors or computers. The apparatus can include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, or a combination of one or more of them.
A computer program (also known as a program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment. A computer program does not necessarily correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub-programs, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network.
The processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform functions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit).
Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a processor for performing instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks. However, a computer need not have such devices. Moreover, a computer can be embedded in another device, e.g., a mobile telephone, a personal digital assistant (PDA), a mobile audio player, a Global Positioning System (GPS) receiver, to name just a few. Computer-readable media suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry.
To provide for interaction with a user, embodiments of the subject matter described in this specification can be implemented on a computer having a display device, e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor, for displaying information to the user and a keyboard and a pointing device, e.g., a mouse or a trackball, by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input.
Embodiments of the subject matter described in this specification can be implemented in a computing system that includes a back-end component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a front-end component, e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the subject matter described is this specification, or any combination of one or more such back-end, middleware, or front-end components. The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network. Examples of communication networks include a local area network ("LAN") and a wide area network ("WAN"), e.g., the Internet.
The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other.
While this specification contains many specifics, these should not be construed as limitations on the scope of the invention or of what may be claimed, but rather as descriptions of features specific to particular embodiments of the invention. Certain features that are described in this specification in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a subcombination or variation of a subcombination.
Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multitasking and parallel processing may be advantageous. Moreover, the separation of various system components in the embodiments described above should not be understood as requiring such separation in all embodiments, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products.
Thus, particular embodiments of the invention have been described. Other embodiments are within the scope of the following claims. For example, the actions recited in the claims can be performed in a different order and still achieve desirable results.
|Brevet citķ
|Date de dķp¶t
|Date de publication
|2 dķc. 1991
|6 sept. 1994
|International Business Machines Corporation
|Method for optimizing processing of join queries by determining optimal processing order and assigning optimal join methods to each of the join operations
|8 nov. 1994
|6 juin 1995
|Teleserve Transaction Technology As
|Continuously available database server having multiple groups of nodes, each group maintaining a database copy with fragments stored on multiple nodes
|23 mai 1996
|23 dķc. 1997
|Microsoft Corporation
|Intelligent joining system for a relational database
|11 dķc. 1995
|11 ao¹t 1998
|Sybase, Inc.
|Database system with buffer manager providing per page native data compression and decompression
|11 dķc. 1995
|11 ao¹t 1998
|Sybase, Inc.
|Database system with methodology for storing a database table by vertically partitioning all columns of the table
|10 avr. 1996
|2 mars 1999
|International Business Machines Corporation
|Method and apparatus for implementing partial declustering in a parallel database system
|20 mars 1997
|29 juin 1999
|Sybase, Inc.
|SQL-based database system with improved indexing methodology
|1 dķc. 1997
|28 sept. 1999
|Microsoft Corporation
|Database system index selection using candidate index selection for a workload
|8 juil. 1998
|28 dķc. 1999
|Required Technologies, Inc.
|Value-instance-connectivity computer-implemented database
|30 sept. 1998
|22 fķvr. 2000
|Oracle Corporation
|Methods for collecting query workload based statistics on column groups identified by RDBMS optimizer
|11 oct. 1999
|15 ao¹t 2000
|International Business Machines Corporation
|System and method for identifying and constructing star joins for execution by bitmap ANDing
|16 janv. 1998
|16 juil. 2002
|Telefonaktiebolaget Lm Ericsson (Publ)
|Data partitioning and duplication in a distributed data processing system
|12 oct. 2001
|5 oct. 2004
|Ncr Corporation
|Collecting statistics in a database system
|12 avr. 2001
|12 avr. 2005
|Clareos, Inc.
|Analytical database system that models data to speed up and simplify data analysis
|6 ao¹t 2001
|4 avr. 2006
|Sensage, Inc.
|Storage of row-column data
|10 fķvr. 2004
|21 nov. 2006
|Netezza Corporation
|Materialized view system and method
|19 dķc. 2005
|9 dķc. 2008
|Yahoo! Inc.
|System and method for updating data in a distributed column chunk data store
|10 ao¹t 2004
|27 janv. 2009
|Microsoft Corporation
|Dynamic physical database design
|18 dķc. 2002
|11 mai 2010
|International Business Machines Corporation
|System and method for automatically building an OLAP model in a relational database
|23 juin 2003
|23 dķc. 2004
|Microsoft Corporation
|Integrating horizontal partitioning into physical database design
|23 sept. 2003
|24 mars 2005
|International Business Machines Corporation
|Method and system for optimizing snow flake queries
|7 sept. 2004
|25 ao¹t 2005
|Oracle International Corporation
|Method for index tuning of a SQL statement, and index merging for a multi-statement SQL workload, using a cost-based relational query optimizer
|17 fķvr. 2005
|25 ao¹t 2005
|Datallegro, Inc.
|Ultra-shared-nothing parallel database
|27 avr. 2004
|15 sept. 2005
|Sybase, Inc.
|Database System with Methodology for Automated Determination and Selection of Optimal Indexes
|21 mai 2004
|22 dķc. 2005
|Clark Thomas K
|Method, apparatus and program storage device for providing failover for high availability in an N-way shared-nothing cluster system
|15 oct. 2004
|20 avr. 2006
|Microsoft Corporation
|Database tuning advisor
|17 fķvr. 2005
|17 ao¹t 2006
|International Business Machines Corporation
|Method, system and program for selection of database characteristics
|6 mai 2005
|9 nov. 2006
|Microsoft Corporation
|Integrating vertical partitioning into physical database design
|10 juin 2005
|14 dķc. 2006
|Al-Omari Awny K
|Use of multi-join operator and rules as framework for join tree processing in database systems
|23 juin 2006
|1 fķvr. 2007
|George Chow
|System and method for translating between relational database queries and multidimensional database queries
|12 sept. 2006
|22 mars 2007
|Louis Burger
|System and a method for identifying a selection of index candidates for a database
|2 ao¹t 2006
|7 fķvr. 2008
|Mitch Cherniack
|Query Optimizer
|8 mai 2007
|13 nov. 2008
|Zane Barry M
|Query handling in databases with replicated data
|24 nov. 2009
|27 mai 2010
|Vertica Systems, Inc.
|Modular query optimizer
|30 juil. 2007
|7 fķvr. 2008
|Vertica Systems, Inc.
|Automatic vertical-database design
|"ADABAS-RAPID Demonstration Databases," Statistics Canada, Demonstration Databases, Jun. 1978, 38 pages.
|"An Introduction to Multidimensional Database Technology," Kenan Systems Corporation, 1993-1995, 29 pages.
|"IBM Universal Database for Linux, Unix, and Windows," Product Manual, Version 7, 68 pages, http://www-306.ibm.com/software/data/db2/udb/support/manualsv7.html.
|"IBM Universal Database for Linux, Unix, and Windows," Product Manual, Version 7.2, 94 pages, http://www-306.ibm.com/software/data/db2/udb/support/manualsv7.html.
|"RAPID Database Creation," Statistics Canada, 1978, 76 pages.
|"RAPID Database Retrieval Manual," Statistics Canada, 1978, 46 pages.
|"RAPID DBMS Manual," Statistics Canada, 1978, 16 pages.
|"RAPID File Design Manual," Statistics Canada, 1978, 56 pages.
|"RAPID Language Reference," Statistics Canada, 1978, 134 pages.
|"RAPID Programmers Guide," Statistics Canada, 1978, 100 pages.
|"Sadas Brochure," Advanced Systems s.r.I., 5 pages.
|"Sadas QA," Advanced Systems s.r.I., 2 pages.
|"IBM Universal Database for Linux, Unix, and Windows," Product Manual, Version 7, 68 pages, http://www-306.ibm.com/software/data/db2/udb/support/manualsv.7.html, Copyright 1997, 2000.
|"IBM Universal Database for Linux, Unix, and Windows," Product Manual, Version 7.2, 94 pages, http://www306.ibm.com/software/data/db2/udb/support/manualsv.7.html, Copyright 1997, 2001.
|"Sadas Brochure," Advanced Systems s.r.l., 5 pages, accessed Jun. 2, 2011
|"Sadas QA," Advanced Systems s.r.l., 2 pages, accessed Jun. 2, 2011.
|Abadi et al., "Column-Stores vs. Row-Stores: How Different Are They Really?" SIGMOD '08, Jun. 9-12, 2008, Vancouver, British Columbia, 14 pages.
|Abadi et al., "Materialization Strategies in a Column-Oriented DBMS," Proceedings of ICDE, 2007, Istanbul, Turkey, 10 pages.
|Abadi, Daniel, "A Tour Through Hybrid Column/row-Oriented DBMS Schemes," [online], [retrieved Sep. 9, 2009]. Retrieved from Internet: , 10 pages.
|Abadi, Daniel, "Redefining Physical Data Independence," Proceedings of CIDR, Jan. 2007, 6 pages.
|Abadi, Daniel, "Watch Out for VectorWise," [online], [retrieved Sep. 9, 2009]. Retrieved from Internet: , 9 pages.
|Abadi, Daniel, "A Tour Through Hybrid Column/row-Oriented DBMS Schemes," [online], [retrieved Sep. 9, 2009]. Retrieved from Internet: <URL: http://dbmsmusings.blogspot.com/2009/09/tour-through-hybrid-columnrow-oriented.html>, 10 pages.
|Abadi, Daniel, "Watch Out for VectorWise," [online], [retrieved Sep. 9, 2009]. Retrieved from Internet: <URL: http://dbmsmusings.blogspot.com/2009/07/watch-out-for-vectorwise.html>, 9 pages.
|Agrawal et al., "Automated Selection of Materialized Views and Indexes for SQL Databases," Proceedings of the 26th International Conference on Very Large Databases, Cairo, Egypt, 2000, pp. 496-505.
|Agrawal et al., Integrating Vertical and Horizontal Partitioning into Automated Physical Database Design, SIGMOD, Jun. 13, 2004, 12 pages.
|Ailamaki et al., "Weaving Relations for Cache Performance," Proceedings of the 27th VLDB Conference, Roma, Italy, 2001, 12 pages.
|Alsberg, Peter A. ,"Space and Time Savings Through Large Data Base Compression and Dynamic Restructuring," Proceedings of the IEEE vol. 63, No. 8, Aug. 1975, 9 pages.
|Andersson, "A Study of Modified Interpolation Search in Compressed, Fully Transposed, Ordered Files," Proceedings of the 4th International Conference on Statistical and Scientific Database Management, 1988, 13 pages.
|Apache Cassandra "Data Model" [online], [retrieved on May 29, 2009]. Retrieved from the Internet , 2 pages.
|Apache Cassandra "Data Model" [online], [retrieved on May 29, 2009]. Retrieved from the Internet <URL: http://cwiki.apache.org/confluence/display/CSDR/Pata+Model>, 2 pages.
|Baker, Margaret, "User's Guide to the Berkeley Transposed File Statistical System," Survey Research Center Technical Report No. One, Jan. 1974, 132 pages.
|Baralis et al., "Materialized View Selection in a Multidimensional Database," in Proceedings of the 23rd VLDB Conference, Athens, Greece, 1997, pp. 156-165.
|Batory, D. S., "On Searching Transposed Files," ACM Transactions on Database Systems, vol. 4, No. 4, Dec. 1979, 14 pages.
|Bleier et al., "File Organization in the SDC Time-Shared Data Management System (TSMS)," North-Holland Publishing Company, 1969, 8 pages.
|Boncz et al., "MonetDB/X100: Hyper-Pipelining Query Execution," Proceedings of the 2005 CIDR Conference, 13 pages.
|Boral et al., "Prototyping Bubba, A Highly Parallel Database System," IEEE Trans. on Knowledge and Data Engineering, Mar. 1990, 21 pages.
|Brun et al., "Visualization of Scientific Data for High Energy Physics. PAW++, KUIP, PIAF: General-Purpose Portable Software Tools for Data Analysis and Presentation," European Organization for Nuclear Research, 1993, 12 pages.
|Burnett et al., "Data Management Support for Statistical Data Editing and Subset Selection," Proceedings of the 1st LBL Workshop on Statistical Database Management, 1981, 15 pages.
|Chaudhuri et al., "An Efficient Cost-Driven Index Selection Tool for Microsoft SQL Server," Proceedings of the 23rd VLDB Conference Athens, Greece, 1997, pp. 146-155.
|Cochinwala et al., "A Multidatabase System for Tracking and Retrieval of Financial Data," Proceedings of the 20th VLDB Conference Santiago, Chile, 1994, 8 pages.
|Cohen et al., MAD Skills: New Analysis Practices for Big Data [online], [retrieved May 29, 2009]. Retrieved from the Internet , 12 pages.
|Cohen et al., MAD Skills: New Analysis Practices for Big Data [online], [retrieved May 29, 2009]. Retrieved from the Internet <URL: http://db.cs.berkeley.edu/papers/vldb09-madskills.pdf>, 12 pages.
|Communication Relating to the Results of the Partial International Search for PCT Application No. PCT/US2010/041898, dated Oct. 13, 2010, 8 pages.
|Cornell et al., "An Effective Approach to Vertical Partitioning for Physical Design of Relational Databases," IEEE Transactions on Software Engineering, vol. 16, No. 2, Feb. 1990, 11 pages.
|Cornell, "A Vertical Partitioning for Relational Databases," IBM Thomas J. Watson Research Center, 1987, 8 pages.
|Cressman, "Analysis of Data Compression in the DLT2000 Tape Drive," Digital Technical Journal vol. 6, No. 2, 1994, 17 pages.
|Cudre-Mauroux et al., "The Case for RodentStore, an Adaptive, Declarative Storage System," 4th Biennial Conference on Innovative Data Systems Research (CIDR), Jan. 4-7, 2009, Asilomar, California, 7 pages.
|Date, C. J., "An Introduction to Database Systems, vol. 1," Addison-Wesley Publishing Company, 1990, 400 pages.
|DBMS2—"Pax Analytica? Row- and Column-Stores Begin to Come Together," [online], (retrieved o Sep. 9, 2009]. Retrieved from Internet: <URL: http://www.dbms2.com/2009/08/04/pax-analytica-row-and-column-stores-begin-to-come-together/>, 7 pages.
|DBMS2-The secret sauce to Clearpace's compression [online], [retrieved May 29, 2009]. Retrieved from the Internet , 6 pages.
|DBMS2—The secret sauce to Clearpace's compression [online], [retrieved May 29, 2009]. Retrieved from the Internet <URL: http://www.dbms2.com/2009/05/14/the-secret-sauce-to-clearpaces-compression/>, 6 pages.
|Elmasri et al., "Fundamentals of Database Systems." The Benjamin/Cummings Publishing Company, Inc., 1989.
|Farsi et al., "A Relational Database for Efficient Processing of Statistical Queries," Proceedings of the Second International Workshop on Statistical Database Management, 1983, 9 pages.
|Galindo-Legaria, Cesar A. et al. "Outerjoin Simplification and Reordering for Query Optimization," ACM Trans. Database Syst. 22(1) pp. 43-73 (1997).
|Goil et al., "Sparse Data Storage of Multi-Dimensional Data for OLAP and Data Mining," Department of Electrical & Computer Engineering Center for Parallel and Distributed Computing, 1994, 26 pages.
|Goldstein, Andrew C. "Files-11 On-Disk Structure Specification," Digital Equipment Corporation, Jan. 15, 1979, 104 pages.
|Greenplum-Greenplum Database 3.3-Features [online], [retrieved Jul. 13, 2009]. Retrieved from the Internet , 6 pages.
|Greenplum—Greenplum Database 3.3—Features [online], [retrieved Jul. 13, 2009]. Retrieved from the Internet <URL: http://www.greenplum.com/products/features/>, 6 pages.
|Gupta et al., "Selection of Views to Materialize under a Maintenance-Time Constraint," International Conference on Database Theory (ICDT), 1999, 453-470.
|Hammer et al., "A Heuristic Approach to Attribute Partitioning," Laboratory for Computer Science, 1979, 9 pages.
|Hankins et al., "Data Morphing: An Adaptive, Cache-Conscious Storage Technique," Proceedings of the 29th VLDB Conference, Berlin, Germany, 2003, 12 pages.
|Hawthorn, Paula, "Microprocessor Assisted Tuple Access, Decompression and Assembly for Statistical Database Systems," Proceedings of the 8th VLDB, 1982, pp. 223-233.
|Howard, Philip, "The optimal warehouse," [online], (retrieved on Sep. 9, 2009]. Retrieved from Internet: <URL: http://www.it-director.com/technology/data—magmt/content.php?cid-11453>, 2 pages.
|Inmon et al., "The Dynamics of Data Base," Prentice Hall, 1986.
|International Preliminary Report on Patentability for PCT Application No. PCT/US07/74740, dated Feb. 12, 2009.
|International Preliminary Report on Patentability for PCT Application No. PCT/US07/74741, dated Feb. 12, 2009.
|International Search Report and Written Opinion for PCT Application No. PCT/US07/74740, dated Jul. 3, 2008.
|International Search Report and Written Opinion for PCT Application No. PCT/US07/74741, dated Jul. 24, 2008.
|International Search Report and Written Opinion for PCT Application No. PCT/US2010/023216, dated Aug. 3, 2010, 49 pages.
|Ioannidis et al., "Left-Deep vs. Bushy Trees: An Analysis of Strategy Space and ITS Implications for Query Optimization," Computer Sciences Department, University of Wisconsin, Madison, WI, 1991, pp. 168-177.
|Khoshafian et al., "A Query Processing Strategy for the Decomposed Storage Model," Microelectronics and Computer Technology Corporation, 1987, pp. 636-643.
|Khoshafian et al., "Efficient Support of Statistical Operations," IEEE Trans. On Software Engineering, vol. SE-11, No. 10, Oct. 1985, 13 pages.
|Kickfire "The First Analytic Appliance for the Mass Market, Blog comment," [online], (retrieved on Aug. 6, 2009). Retrieved from the Internet: , 4 pages.
|Kickfire "The First Analytic Appliance for the Mass Market, Blog comment," [online], (retrieved on Aug. 6, 2009). Retrieved from the Internet: <URL: http://www.kickfire.com/blog/?p-392>, 4 pages.
|Korth et al., "Database System Concepts," Second Edition, McGraw-Hill, Inc., 1991.
|March, "On the Selection of Efficient Record Segmentations and Backup Strategies for Large Shared Databases," ACM Transactions on Database Systems, vol. 9, No. 3, Sep. 1984, 30 pages.
|McCarthy, J. L., "Enhancements to the Codata Data Definition Language," Feb. 1982.
|McKusick et al., "A Fast File system for UNIX," Computer ACM Transactions on Computer Systems 2, 3 (Aug. 1984), pp. 181-197.
|Muthuraj et al., "A Formal Approach to the Vertical Partitioning Problem in Distributed Database Design," CIS Department University of Florida and College of Computing Georgia, A Technical paper, 1992, 24 pages.
|Naeker, Philip A. H. "Real-World Interoperability", Part 4, RDBMS Maturity, vol. 10, No. 12, Nov. 1991, 8 pages.
|Navathe et al., "Vertical Partitioning Algorithms for Database Design," ACM Transactions on Database Systems, vol. 9, No. 4, Dec. 1984, 31 pages.
|Navathe, et al., "Vertical Partitioning for Database Design: A Graphical Algorithm," Database Systems Research and Development Center, 1989, 11 pages.
|O'Neil, Patrick E., "Model 204 Architecture and Performance," Presented at 2nd International Workshop on High Performance Transaction Systems, Sep. 1987, 21 pages.
|Ono et al., "Measuring the Complexity of Join Enumeration in Query Optimization," Proceedings of the 16th VLDB Conference, Brisbane, Australia, Aug. 13-16, 1990), pp. 314-325.
|Papadomanolakis et al., "AutoPart: Automating Schema Design for Large Scientific Databases Using Data Partitioning," Proc. 16th International Conference on Scientific and Statistical Database Management (SSDBM 2004), Santorini Island, Greece, Jun. 2004, 10 pages.
|Pellenkoft et al., "The Complexity of Transformation-Based Join Enumeration," Proceedings of the 23rd VLDB Conference, Athens, Greece, 1997, pp. 306-315.
|Piraheash, Hamid et al. "Extensible/Rule Based Query Rewrite Optimization in Starburst," IBM Almaden Research Center, San Jose, CA, pp. 39-48.
|Piraheash, Hamid et al. "Extensible/Rule Based Query Rewrite Optimization in Starburst," IBM Almaden Research Center, San Jose, CA, pp. 39-48, SIGMOD '92 Proceedings of the 1992 ACM SIGMOD international conference on Management of data, vol. 21, Issue 2, Jun. 1, 1992.
|Richardson, "Supporting Lists in a Data Model (A Timely Approach)," Proceedings of the 18th VLDB Conference Vancouver, British Columbia, Canada, 1992, 12 pages.
|Schaffner et al., "A Hybrid Row-Column OLTP Database Architecture for Operational Reporting" [online], [retrieved on May 29, 2009]. Retrieved from the Internet , 14 pages.
|Schaffner et al., "A Hybrid Row-Column OLTP Database Architecture for Operational Reporting" [online], [retrieved on May 29, 2009]. Retrieved from the Internet <URL:http://www.vldb.org/conf/2008/workshops/VVProc—BIRTE/p7-schaffner.pdf>, 14 pages.
|Schek, Hans-Joerg, "Information Retrieval with APL by Adaptive Index and User Guidance," Information Retrieval with APL, 1980, 8 pages.
|Schemas Modeling Techniques, Oracle Database Data Warehousing Guide, 2001, 24 pages.
|Schemas, Oracle8i Data Warehousing Guide, 1999, 8 pages.
|Selinger et al., "Access Path Selection in a Relational Database Management System," IBM's System R Optimizer, Proceedings of the ACM SIGMOD Conference on the Management of Data, Boston, MA, May 1979), pp. 23-34.
|Seshadri et al., "Sequence Query Processing," SIGMOD 94, ACM, pp. 430-441.
|Shao et al., "Clotho: Decoupling Memory Page Layout from Storage Organization," Carnegie Mellon University, Proceedings of the 30th VLDB Conference, Toronto, Canada, 2004, 12 pages.
|Shasha, Dennis E. "Database Tuning," Prentice Hall PTR, 1992.
|Shoshani et al., "Statistical Databases: Characteristics, Problems, and Some Solutions," Proceedings of the Eighth International Conference on Very Large Data Bases, Sep. 1982, 12 pages.
|Son J.H. et al.: "An Adaptable Vertical Partitioning Method In Distributed Systems", Journal of Systems and Software, Elsevier North Holland, New York, NY, US LNKD-DOI: 10.1016/J.JSS.2003.04.002, vol. 73, No. 3, Nov. 1, 2004, pp. 551-561, XP004560798 ISSN: 0164-1212, 11 pages.
|Stavros, Harizopoulos, et al., "Performance Tradeoffs in Read-Optimized Databases"., Proceedings of the Intgenational Conference on Very Large Data Bases., VLDB Conference, Rome, Italy, Sep. 11-14, 2001., Morgan Kaufman, Orlando, FLA., Sep. 12, 2006, pp. 487-496.
|Steinbrunn et al., "Heuristic and Randomized Optimization for the Join Ordering Problem," VLDB Journal, Spring Verlag, Berlin, DE LINKD-DOI: 10.1007/500778005040, vol. 6, No. 3, Aug. 1, 1997, pp. 191-208, XP000957755, ISSN: 1066-8888, the whole document.
|Steinbrunn et al., "Heuristic and Randomized Optimization for the Join Ordering Problem," VLDB Journal, Spring Verlag, Berlin, DE LINKD—DOI: 10.1007/500778005040, vol. 6, No. 3, Aug. 1, 1997, pp. 191-208, XP000957755, ISSN: 1066-8888, the whole document.
|Stonebraker et al., "C-Store: A Column-Oriented DBMS," Proc. 31st VLDB Conference, Trodheim, Norway, 2005, 12 pages.
|Stonebraker, Michael, Readings in Database Systems, Second Edition, Morgan Kaufmann, 1994.
|Supplementary European Search Report for EP Application No. EP 07799914, dated May 28, 2010, 63 pages.
|Tanaka, "A Data-stream Database Machine with Large Capacity," Advanced Database Machine Architecture, 1983, 37 pages.
|Tao et al., "Optimizing Large Star-Schema Queries with Snowflakes via Heuristic-Based Query Rewriting," IBM Canada Ltd., 2003, pp. 1-15.
|Thomas et al., "ALDS Project: Motivation, Statistical Database Management Issues, Perspectives, and Directions," Proceedings of the 2nd International Workshop on Statistical Database Management, 1983, 7 pages.
|Tian-Lei et al., "Automatic Relational Database Compression Scheme Design Based on Swarm Evolution," Journal of Zhejiang University, published Apr. 5, 2006, pp. 1642-1651.
|Townsend et al., "Lowering Your IT Costs with Oracle Database 11g Release 2," An Oracle Corporation White Paper, Sep. 2009, 23 pages.
|Tsuda et al., "Transposition of Large Tabular Data Structures with Applications to Physical Database Organization-Part I. Transposition of Tabular Data Structures and Part II. Applications to Physical Database Organization," ACTA Information, vol. 19, 1983, 41 pages.
|Tsuda et al., "Transposition of Large Tabular Data Structures with Applications to Physical Database Organization—Part I. Transposition of Tabular Data Structures and Part II. Applications to Physical Database Organization," ACTA Information, vol. 19, 1983, 41 pages.
|Turner et al., "A DBMS for Large Statistical Databases," Statistics Canada, 1979, pp. 319-327.
|Uno, Takeaki "An Algorithm for Enumerating all Directed Spanning Trees in a Directed Graph," In Proceedings of the 7th International Symposium on Algorithms and Computation, Lecture Notes in Computer Science; vol. 1178, 1996, pp. 166-173.
|Valentin et al., "DB2 Advisor: An Optimizer Smart Enough to Recommend Its own Indexes," Proc. ICDE Conf., 2000, pp. 101-110.
|Vance et al., "Rapid Bush Join-Order Optimization with Cartesian Products," Proceedings of the 1996 ACM SIGMOD International Conference on Management of Data, Montreal, Quebec, Canada, Jun. 4-6, 1996), pp. 35-46.
|Vertica Systems Inc., "The Vertica Analytic Overview White Paper", [Online] Nov. 2008, pp. 1-13, Retrieved from the Internet: URL:http://www.acctiva.co.uk/userfiles/file/Verti caArchitecutureWhitePaper.pdf [retrieved on Sep. 19, 2010].
|Weeks et al., "Flexible Techniques for Storage and Analysis of Large Continuous Surveys," Proceedings of the First LBL Workshop on Statistical Database Management, Mar. 1982.
|Wiederhold, Gio, "Database Design," McGraw-Hill Book Company, 1983.
|Wong et al., "Bit Transposed Files," Proceedings of VLDB 85, Stockholm, 1985, 10 pages.
|Zhou et al., A Multi-resolution Block Storage Model for Database Design, Proceedings of the Seventh International Database Engineering and Applications Symposium (IDEAS '03), 4 pages.
|Zilio et al., DB2 Design Advisor; Integrated Automatic Physical Database Design, Proc. 30th VLDB Conference, Toronto, Canada, Sep. 2004, pp. 1087-1097.
|Zukowski et al., DSM vs. NSM : CPU Performance Tradeoffs in Block-Oriented Query Processing, Proceedings of the Fourth International Workshop on Data Management on New Hardware, Jun. 13, 2008, Vancouver, Canada, 8 pages.
|Brevet citant
|Date de dķp¶t
|Date de publication
|8 janv. 2008
|7 ao¹t 2012
|International Business Machines Corporation
|Method of recovering from software failures using replanning
|8 janv. 2008
|14 ao¹t 2012
|International Business Machines Corporation
|Method and system for modeling user requests, applications and components used in dynamic application assembly
|18 mai 2010
|23 oct. 2012
|Sap Ag
|Join tuple assembly by partial specializations
|7 janv. 2008
|13 nov. 2012
|International Business Machines Corporation
|Method and system for simplified service composition in web environment
|3 mai 2011
|30 avr. 2013
|Oracle International Corporation
|System and method for supporting data warehouse metadata extension using an extender
|29 oct. 2007
|7 mai 2013
|Oracle International Corporation
|Techniques for bushy tree execution plans for snowstorm schema
|15 oct. 2007
|9 juil. 2013
|International Business Machines Corporation
|Method and system for simplified assembly of information processing applications
|24 fķvr. 2010
|24 sept. 2013
|Oracle International Corporation
|Generation of star schemas from snowflake schemas containing a large number of dimensions
|26 mars 2008
|28 janv. 2014
|International Business Machines Corporation
|Method and apparatus for dynamic web service composition and invocation
|16 mai 2012
|25 fķvr. 2014
|Renmin University Of China
|Multi-dimensional OLAP query processing method oriented to column store data warehouse
|13 ao¹t 2012
|2 sept. 2014
|Magnet Systems, Inc.
|Managing cross-correlated data
|5 mai 2008
|25 nov. 2014
|International Business Machines Corporation
|Method and apparatus for simplified assembly of parametric information processing applications
|21 avr. 2008
|3 fķvr. 2015
|International Business Machines Corporation
|Method and system for dynamic software reconfiguration triggered by component- or system- initiated events
|17 juin 2011
|14 avr. 2015
|International Business Machines Corporation
|Transparent analytical query accelerator
|6 sept. 2012
|12 mai 2015
|Oracle International Corporation
|Automatic denormalization for analytic query processing in large-scale clusters
|11 dķc. 2012
|5 janv. 2016
|Microsoft Technology Licensing, Llc
|Optimizing parallel queries using interesting distributions
|15 mars 2013
|15 mars 2016
|International Business Machines Corporation
|Automated software composition
|24 ao¹t 2015
|29 nov. 2016
|Attivio Inc.
|Automated creation of join graphs for unrelated data sets among relational databases
|3 mai 2011
|3 janv. 2017
|Oracle International Corporation
|System and method for specifying metadata extension input for extending data warehouse
|18 nov. 2013
|25 juil. 2017
|Sap Se
|Join optimization in a database
|27 nov. 2015
|15 ao¹t 2017
|Microsoft Technology Licensing, Llc
|Optimizing parallel queries using interesting distributions
|13 mars 2014
|17 oct. 2017
|Sybase, Inc.
|Splitting of a join operation to allow parallelization
|29 oct. 2007
|30 avr. 2009
|Rafi Ahmed
|Techniques for bushy tree execution plans for snowstorm schema
|8 janv. 2008
|9 juil. 2009
|Zhen Liu
|Method of recovering from software failures using replanning
|7 janv. 2008
|9 juil. 2009
|Eric Bouillet
|Method and system for simplified service composition
|26 mars 2008
|1 oct. 2009
|Zhen Liu
|Method and apparatus for dynamic web service composition and invocation
|21 avr. 2008
|22 oct. 2009
|Zhen Liu
|Method and system for dynamic software reconfiguration triggered by component- or system- initiated events
|24 fķvr. 2010
|25 ao¹t 2011
|Oracle International Corporation
|Generation of star schemas from snowflake schemas containing a large number of dimensions
|18 mai 2010
|24 nov. 2011
|Gerhard Hill
|Join tuple assembly by partial specializations
|17 juin 2011
|20 dķc. 2012
|International Business Machines Corporation
|Transparent analytical query accelerator
|6 sept. 2012
|6 mars 2014
|Oracle International Corporation
|Automatic Denormalization For Analytic Query Processing In Large-Scale Clusters
|11 dķc. 2012
|12 juin 2014
|Microsoft Corporation
|Optimizing parallel queries using interesting distributions
|28 dķc. 2012
|19 juin 2014
|Sap Ag
|Column smart mechanism for column based database
|18 nov. 2013
|21 mai 2015
|Tobias Mindnich
|Join Optimization in a Database
|31 dķc. 2013
|2 juil. 2015
|Anisoar NICA
|Cardinality Estimation Using Spanning Trees
|17 avr. 2014
|22 oct. 2015
|Wisconsin Alumni Research Foundation
|Database system with highly denormalized database structure
|24 ao¹t 2015
|25 fķvr. 2016
|Attivio, Inc.
|Automated creation of join graphs for unrelated data sets among relational databases
|13 mars 2015
|26 mai 2016
|Juchang Lee
|RowID-Based Data Synchronization for Asynchronous Table Replication
|8 ao¹t 2013
|20 fķvr. 2014
|Magnet Systems, Inc.
|Managing cross-correlated data
|24 ao¹t 2015
|25 fķvr. 2016
|Attivio, Inc.
|Automated creation of join graphs for unrelated data sets among relational databases
|Classification aux ╔tats-Unis
|707/714, 707/797, 707/606
|Classification internationale
|Classification coopķrative
|Classification europķenne
|9 mars 2009
Owner name: VERTICA SYSTEMS, INC., MASSACHUSETTS
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:LAMB, ANDREW;CHERNIACK, MITCH;LAWANDE, SHILPA;AND OTHERS;SIGNING DATES FROM 20090211 TO 20090224;REEL/FRAME:022363/0976
|29 ao¹t 2011
Owner name: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., TEXAS
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:VERTICA SYSTEMS, INC.;REEL/FRAME:026819/0911
Effective date: 20110817
|29 mai 2015
|Fee payment
Year of fee payment: 4
|9 nov. 2015
Owner name: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP, TEXAS
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P.;REEL/FRAME:037079/0001
Effective date: 20151027
|9 juin 2017
Owner name: ENTIT SOFTWARE LLC, CALIFORNIA
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP;REEL/FRAME:042746/0130
Effective date: 20170405


text:
Innovate | Incubate | Accelerate
We Create, Fund & Empower Entrepreneurs
Victory Square Technologies (VST) incubates and invests in game-changing entrepreneurs. Innovation is at the core of what we do. We believe great companies are built from experimentation of bold ideas. At VST, entrepreneurs have access to our education programs, global network of mentors, distribution partners, creative workspaces, resources and operational support to help them scale internationally. We focus predominantly on the following key verticals:

subset: commoncrawl


text:
* American edges Spieth, Rahm, O'Hair by one stroke
* Claims second tour victory after six second-placings
* Rahm misses 10-footer that would have forced playoff (Adds quotes, details)
May 28 (Reuters) - Kevin Kisner discarded his bridesmaid tag when he sank a clutch, five-foot putt for par to seal a one-stroke victory at the Dean & DeLuca Invitational in Fort Worth, Texas on Sunday.
Kisner, a six times runnerup on the PGA Tour, boldly slammed his uphill putt into the middle of the cup for his second career win.
"I've been in this position a ton and haven't finished as much as I'd like to," the intense 33-year-old from South Carolina told Golf Channel after carding 66 to finish at 10-under 270 at Colonial Country Club.
In closing the deal, Kisner avoided what would have been a four-way playoff, finishing a stroke clear of fellow Americans Jordan Spieth (65) and Sean O'Hair (66), and Spaniard Jon Rahm (66).
Rahm had the best chance to force extra holes but missed a 10-foot birdie putt at the last.
Overnight leader Webb Simpson (71) bogeyed the par-four 18th to finish two shots behind.
Kisner jump-started his round with a 40-foot birdie at the par-four 10th and then broke clear with further birdies at the next two holes.
But a three-putt bogey from the fringe at the 16th set up an exciting finish.
"I hung in there coming in," he said. "It got a little tighter than I wanted to but it's a fun way to finish. I kept going at the flag and trying to make as many birdies as I could.
"I'm just happy to win any tournament, but especially here. I love this place."
Spieth came close to successfully defending his title with a bogey-free final round but left too much ground to make up.
"It was really close," the former world number one told reporters. "All in all a very solid round. It's hard to ask for much more than 65 on the last day."
Spieth was upbeat to find his form. On Friday he was in danger of missing an unprecedented third consecutive cut but he played the final 45 holes in 11-under.
Rahm, 22, continued to enhance his profile as the game's next superstar with another stellar performance, breaking into the top 10 in the world rankings.
He had birdie putts inside 20 feet on the final eight holes but converted only two of them.
"I wish I could have made a couple more," he said. "This is golf. I kept hitting good shots and having putts from 10 or 15 feet for birdie. It will sting for a little while." (Reporting by Andrew Both in Cary, North Carolina; Editing by Frank Pingue / Ian Ransom)


text:
Traveling Luck for Parish, West Virginia, United States
Where is Parish?What's around Parish?
Wikipedia near Parish
Where to stay near Parish
The timezone in Parish is America/Iqaluit
Sunrise at 08:16 and Sunset at 18:06. It's light
Latitude. 39.3078°, Longitude. -81.3256° , Elevation. 190m
Weather near Parish; Report from Parkersburg, Mid-Ohio Valley Regional Airport, WV 13km away
Weather :
Temperature: 2°C / 36°F
Wind: 5.8km/h
Cloud: Few at 1600ft Scattered at 4000ft
Weather :
Temperature: 2°C / 36°F
Wind: 5.8km/h
Cloud: Few at 1600ft Scattered at 4000ft
Satellite map around Parish
Loading map of Parish and it's surroudings
Geographic features & Photographs around Parish, in West Virginia, United States
- stream;
- a body of running water moving to a lower level in a channel on land.
- Old Road Run (0km)
- Right Fork Bull Creek (0.1km)
- Isaacs Fork (1.3km)
- Horseneck Run (1.9km)
- Rush Run (2.5km)
- Clay Lick Run (3km)
- Campbell Run (4.1km)
- Atward Run (4.7km)
- Bull Run (4.8km)
- Sulphur Spring Run (4.8km)
- Calf Creek (5.2km)
- Plummers Creek (5.8km)
- Bull Creek (6.2km)
- Sheets Run (6.3km)
- Robins Run (6.6km)
- Cow Creek (6.7km)
- school;
- building(s) where instruction in one or more branches of knowledge takes place.
- Rush Run School (historical) (1.8km)
- Union School (historical) (2.7km)
- Oak Grove School (historical) (3.5km)
- Middle Ridge School (historical) (3.6km)
- Horseneck School (historical) (3.7km)
- Pumpkin Knob School (4km)
- Hannan Ridge School (historical) (4.5km)
- Calf Creek School (historical) (4.9km)
- Last Chance School (historical) (5.6km)
- Borland School (historical) (5.7km)
- Waverly Elementary School (6.8km)
- populated place;
- a city, town, village, or other agglomeration of buildings where people live and work.
- Cluster (2.1km)
- Corbin (historical) (2.3km)
- Borland (4.7km)
- Horseneck (5km)
- Doyle (6.3km)
- Lower Newport (6.3km)
- Waverly (7km)
- Willow Island (7.1km)
- cemetery;
- a burial place or ground.
- Johnson Cemetery (2.1km)
- Middle Ridge Baptist Church Cemetery (3.1km)
- Pleasant Grove Cemetery (3.8km)
- Corbin Cemetery (4km)
- Sinclair Cemetery (4.7km)
- Harness Cemetery (5km)
- McMullen Cemetery (5.9km)
- Lower Newport Cemetery (6.8km)
- church;
- a building for public Christian worship.
- Middle Ridge Baptist Church (3km)
- Horseneck Church (3.7km)
- Pleasant Grove Church (3.8km)
- Nash Springs Church (4.1km)
- Willow Island Baptist Church (6.3km)
Accommodation around Parish
- Local Feature;
- A Nearby feature worthy of being marked on a map..
- Parish (0km)
- Borland Church (historical) (3.6km)
- Social Chapel (historical) (5.5km)
- Fairview Church (historical) (5.9km)
- Barkers Landing (6.7km)
- ridge(s);
- a long narrow elevation with steep sides, and a more or less continuous crest.
- Middle Ridge (2.5km)
- Hannan Ridge (4.9km)
- post office;
- a public building in which mail is received, sorted and distributed.
- Willow Island Post Office (6.6km)
- Waverly Post Office (6.8km)
- dam;
- a barrier constructed across a stream to impound water.
- Willow Island Locks and Dam (6.1km)
- Willow Island Locks And Dam (7.1km)
- valley;
- an elongated depression usually traversed by a stream.
- Polecat Hollow (6km)
- administrative division;
- an administrative division of a country, undifferentiated as to administrative level.
- District A Magisterial District (4.8km)
Wikipedia entries close to
- Eureka Island city city o
- Broadback Island city city o
- Belmont, West Virginia city city o
- First Brother Island city city o
- Mid-Ohio Valley Regional Airport airport airport
- Calcutta, West Virginia city city o
- Buckley Island city city o
- St. Marys, West Virginia city city o
- Williamstown, West Virginia city city o
- Middle Island (West Virginia) city city o
- Boaz, West Virginia city city o
- North Hills, West Virginia city city o
- Marietta (Ohio) city city i
- Muskingum Island city city o
- Cairo, West Virginia city city o
- Grape Island (West Virginia) city city o
Airports close to Parish
Elkins randolph co jennings randolph(EKN), Elkins, Usa (164.8km)
Rickenbacker international(LCK), Columbus, Usa (180.5km)
Port columbus international(CMH), Columbus, Usa (187.7km)
Pittsburgh international(PIT), Pittsburgh (pennsylva), Usa (195.2km)


text: What is up with multiple "categories" in the phone book. By categories I mean: Google Exchange Phone etc I have double and triple contacts in my phone now. I've knocked out Google altogether as I never used it before my Droid (HTC Eris). I sync with my personal laptop and it is running Outlook. I also setup an exchange point for my work info and I get all of the *SAME* contacts with that. <grrrrr/> Is there anyway to delete the contacts off the phone without losing them in my exchange connection? Also, when I add a contact via the phone, I cannot figure out how to get it to sync into exchange. The current sync map I want to move to is: Exchange (work) --> Plaxo.com Outlook (personal machine) --> Plaxo.com Eris Droid --> Exchange only That is, if I can figure out how to sync manual entries on my phone to exchange!


text:
0 items ·
Check out
is back-ordered. We will ship it separately in 10 to 15 days.
Ergonomically designed 14 inch handle. Comfortable to hold and reaches hard to get spots. 2 speeds. 3 interchangeable heads. Powerful. Power, Lightweight. Uses two independently rotating percussion heads to instantly relieve tense tired muscles.
Copyright © 2017 Capital Books and Wellness. Ecommerce Software by Shopify.


text:
The Depressing Reason Cancer Is Washington's No. 1 Killer
New health information revealed heart disease is no longer the No. 1 killer of Washingtonians. It's now cancer. That's understandable, right? The reason is depressing.
New health information revealed heart disease is no longer the No. 1 killer of Washingtonians. It's now cancer. That's understandable, right? The reason is depressing.
October is Breast Cancer Awareness Month. I stumbled across this incredible story that literally touched my soul.
What's the surest sign of a REAL MAN? He gets his prostrate checked. Woody and I are going (we might stop at Red Lobster and get liquored up first, though) and you should too. Here's how to set an appointment:
Don't miss all the fun and entertainment at this years Relay For Life Event at Fran Rish Stadium June 7th.
It's a fundraising event for The American Cancer Society...
This is Bailey (BOO) . She is 2 years old. On October 1st, she underwent neurosurgery to remove a tumor on her brain.
No matter who you are, there's a place for you at Hermistons Relay For Life. Each dollar you raise will help save lives. How far will you go to make a difference in the fight against cancer?
A lot has happened since my re-birth
Spaghetti Feed and silent auction to help local women
Since Ty's 9th annual poker run "crazy for mazie" is this weekend, Ive been thinking about Leukemia and the impact it has on the victims and their family...
Mazie Draper is a local 3yr old little girl fighting Leukemia. I would like to thank the Draper family for coming into the studio's for the interview. Except I'm not very happy about Nason (mazie's brother) he's taking over my job! Hey Nason,GOOD LUCK WORKING WITH CHUCK!
Kristian Anderson sadly died about 2 weeks ago, but this is the video birthday wish he left for his wife. It's very touching, and it even includes an intro by the New Zealand prime minister and Hugh Jackman...
Mazie is a local precious little girl fighting Leukemia. It breaks my heart to see one of our babies in trouble... C'mon tri-citians we can do this!


text:
select location
advanced search
Why I wrote a Britney Spears cabaret
Blogs31 Aug 2017
Summerhall announces full line-up for Edinburgh Festival Fringe 2017
Theatre News11 May 2017
Broadway's Disaster! to get London premiere
Theatre News30 Sep 2016
Sunset Boulevard (London Coliseum)
Reviews5 Apr 2016
Cast announced for Jane Wenham: The Witch of Walkern
Theatre News6 Aug 2015
How stagey are you? Cynthia Erivo vs Dean John-Wilson
Features24 Jun 2015
How stagey are you? Michael Watson vs Tim Driesen
Features11 Jun 2015
20 Questions: Georgia Stitt - My Lifelong Love
Interviews24 Oct 2014
A few of my favourite things: Les Miserables' Celinde Schoenmaker
Features9 Jul 2014
Forbidden Broadway (Menier Chocolate Factory)
Reviews3 Jul 2014
Opening: NT's Amen Corner, Kim Cattrall in Sweet Bird of Youth and Bracken Moor
Theatre News10 Jun 2013
Liz Robertson & Patti Boulaye in solo concerts
Theatre News11 Apr 2013
Michael Coveney: New resolutions and celebrity circus non-watch
Blogs7 Jan 2013
The Rape of Lucrece (EIF)
Reviews23 Aug 2012
Everything Else Happened
Reviews9 Aug 2012
West Side & Gypsy Author Arthur Laurents Dies, 93
Theatre News6 May 2011
Catherine Tate & Mark Gatiss Have Festive Season
Theatre News9 Sep 2010
The Prisoner of Second Avenue
Reviews14 Jul 2010