<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Estimating Result Size and Execution Times for Graph Queries</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Silke</forename><surname>Trißl</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Institut für Informatik</orgName>
								<orgName type="institution">Humboldt-Universität zu Berlin</orgName>
								<address>
									<addrLine>Unter den Linden 6</addrLine>
									<postCode>10099</postCode>
									<settlement>Berlin</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Ulf</forename><surname>Leser</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Institut für Informatik</orgName>
								<orgName type="institution">Humboldt-Universität zu Berlin</orgName>
								<address>
									<addrLine>Unter den Linden 6</addrLine>
									<postCode>10099</postCode>
									<settlement>Berlin</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Estimating Result Size and Execution Times for Graph Queries</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">273C465F2E24663889B260B16BDE4D77</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T12:11+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>In recent years several languages have been proposed to pose queries on graphs. These languages allow to state graph queries that contain multiple node and path variables. Nodes and paths of the graph are incrementally bound to these variables when evaluating the query. For an efficient execution the order of the bindings is important. To optimize this order we must be able to estimate the sizes of intermediate result sets and the time required to produce these. Therefore, in this paper we present estimation functions for reachability and path queries. We show that it is possible to estimate the sizes and times using easy to pre-compute key features of a graph, such as number of nodes and edges, number of nodes without outgoing edges, and the outdegree of the node with highest degree.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1">Introduction</head><p>Graphs occur in many areas of life. In our work, we specifically target graphs used in molecular biology. A human being has, according to current estimates, about 250,000 different proteins in his or her body. Each protein may interact with numerous other proteins or some of the hundreds of thousands organic and inorganic substances. Biologists have studied these complex interactions and their gained knowledge is stored as graphs in publicly available data sources <ref type="bibr" target="#b13">[14]</ref>. The size of biological graphs ranges from a few hundreds to millions of nodes and edges. These biological graphs are often stored in relational database management systems (RDBMS), where they are usually represented by two relations, NODE and EDGE. Relation NODE represents all nodes of a graph, possibly with additional information on each node. Relation EDGE represents edges by giving the start and end node of the edge.</p><p>In <ref type="bibr" target="#b8">[9]</ref> van Helden and colleagues identified several questions that are important for biologists working with biological graphs. We can divide those into two categories, reachability queries, where only nodes are of interest that are reachable from a given start node, and path queries, where paths including their intermediate nodes or lengths of paths are required. For instance, a user may be interested in fatty acids that lie on a path from Glucose to Acetyl-CoA with the condition that the path from the fatty acid to Acetyl-CoA is shorter than k.</p><p>Biologists can use specialized graph viewing tools to display these graphs <ref type="bibr" target="#b14">[15]</ref>. But when manually navigating through images of pathways a biologist might not find a path although there exists one. Thus, tools are required that allow a user to pose a query. In <ref type="bibr" target="#b10">[11]</ref>, we introduced the Pathway Query Language (PQL), a language to formulate queries on biological graphs stored in an RDBMS. In similar fashion, He and Singh <ref type="bibr" target="#b7">[8]</ref> and Dries et al. <ref type="bibr" target="#b5">[6]</ref> also propose graph query languages. All languages have in common that in order to evaluate a graph query they have to bind nodes and paths from the graph to node and path variables of the query. Combinations of bindings are incrementally built to find all correct answers for a query. Clearly, the order in which these combinations are built is essential for high performance <ref type="bibr" target="#b6">[7]</ref>, especially when path predicates are involved, which are notoriously costly to compute <ref type="bibr" target="#b16">[17]</ref>. In the previous example, should one first bind nodes to node variables, or first search fatty acids that are reachable on a path from glucose, or first find paths from a fatty acid to Acetyl-CoA that are shorter than k? To decide this, one must be able to estimate the time required to execute each step and the sizes of the result set.</p><p>In this work we present cardinality estimates to predict the size of the result set and cost functions to approximate the time required to compute reachability and path queries. These functions represent a key feature of our graph query optimizer <ref type="bibr" target="#b15">[16]</ref>. Our estimates are merely based on properties of the graph, such as the number of nodes and edges, the number of nodes without outgoing edges, and the maximum outdegree of the node with highest degree. These properties are easy to compute as a single pass over relations NODE and EDGE is sufficient. We show in Section 4 that good estimation functions for result sizes and query times can be found using these predicates.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.1">Related Work</head><p>Estimating the cardinality is a well established technique in RDBMS, usually performed by building histograms <ref type="bibr" target="#b9">[10]</ref>, as it is important for query optimization <ref type="bibr" target="#b6">[7]</ref>. However, the methods established for RDBMS only target relational operations, such as selection, projection, join, and grouping. In graph queries, such methods can directly be used for estimating the number of bindings for node variables, but they cannot be applied for path variables.</p><p>There are approaches to estimate the sizes of result sets for reachability and path queries. Lipton and Naughton propose in <ref type="bibr" target="#b11">[12]</ref> to estimate the size of the transitive closure by randomly select a set of start nodes and compute for each of these nodes the number of reachable nodes. This way, the result set for reachability queries may be estimated, but no algorithms or estimates for path queries are given.</p><p>In the area of queries on XML data some effort has been put into estimating the size of the result set for path queries. In <ref type="bibr" target="#b12">[13]</ref> McHugh and Widom present a method based on pre-computed paths of length less than k. However, this approach has disadvantages. First, estimating works only well for paths of length k or less, and second, computing and storing paths requires time and a large amount of storage space. There exist several methods <ref type="bibr" target="#b0">[1,</ref><ref type="bibr" target="#b2">3,</ref><ref type="bibr" target="#b17">18]</ref> to estimate the size of the result set of a query on an XML document based on the number and positions of occurrences of elements in an XML document. The disadvantage of these methods is that they only work on XML documents with a tree structure. In contrast, our work addresses general graphs where the problem of reachability and path computation is considerably more complex.</p><p>We are not aware of any prior work that tried to estimate the size of the result of reachability or path queries merely based on general and easy to compute properties of the graph. To do this, we first give an introduction to graph queries in Section 2. Section 3 then presents algorithms for reachability and path queries. In Section 4 we develop functions to estimate cardinality and query time and evaluate our proposed functions. Section 5 concludes the paper.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">Graphs and Graph Queries</head><p>We assume directed multi-graphs G = (V, E) with n = |V | and m = |E|. The number of incoming and outgoing edges of a node is its degree. Based on the distribution of the node degree in a graph we distinguish between random and scale-free graphs. Random graphs have a binomial degree distribution, while the distribution of scale-free graphs follows a power-law <ref type="bibr" target="#b1">[2]</ref>. Graphs in biology are typically scale-free.</p><p>In this work we study reachability and path queries. To describe these queries, we first need to define the terms path and path length.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Definition 1 (Path and path length). Let</head><formula xml:id="formula_0">G = (V, E) be a graph. A path p is a sequence of nodes v 0 , v 1 , v 2 , . . . , v k , v i ∈ V such that (v i−1 , v i ) ∈ E for i = 1, 2, . . . , k.</formula><p>The length of the path is the number of edges in the path.</p><p>If there exists a path p from u to w we say w is reachable from u, written as u w. A path is cycle-free if all nodes in p are distinct, otherwise p is said to contain a cycle. In this work we only consider cycle-free paths. Of course, if w is reachable from u, there might exist more than one path from u to w.</p><p>Definition 2 (Cardinality of reachability and path queries). Let G = (V, E) be a graph and P 1 , . . . P n be properties of the graph. Let S ⊆ V be the set of start nodes and T ⊆ V be the set of target nodes, with u ∈ S and w ∈ T . The cardinality of a reachability query, Card reach (|S|, |T |, P 1 , . . . P n ), is the number of node pairs u, w for which u w holds. The cardinality of path queries, Card path (|S|, |T |, P 1 , . . . P n ) is the number of tuples to represent all paths between u and w.</p><p>Cardinality estimates the size of intermediate results using prior knowledge of the data (P 1 , . . . , P n ). However, in query optimization we are more interested in the time it takes to compute such an intermediate result, which, of course, depends on the size of the set, but also on the method used to compute it. Therefore, in the next chapter we introduce several algorithms for computing reachability and path queries. In Chapter 4 we compare measured execution times with those for our cardinality and time estimates.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Algorithms for Evaluation of Graph Queries</head><p>To answer graph queries we can for example traverse the graph at query time or use index structures, such as the transitive closure (TC)or GRIPP <ref type="bibr" target="#b16">[17]</ref>. Graph traversal can be done using depth-first or breadth-first search <ref type="bibr" target="#b3">[4]</ref>. The size of TC is in the order of O(n 2 ), but can be queried in constant time to answer reachability queries. We presented in <ref type="bibr" target="#b16">[17]</ref> GRIPP, an index structure whose size is in the order of O(n + m) and can be queried in almost constant time for reachability queries. But GRIPP may also be used for path queries as we show in this section.</p><p>GRIPP is based on pre-and postorder labeling of the graph <ref type="bibr" target="#b4">[5]</ref>. Each node in the graph receives as many pre-and postorder and depth values as it has incoming edges, but at least one value triple. Figure <ref type="figure">1(a)</ref> shows the graph for indexing, while Figure <ref type="figure">1(b)</ref> shows the resulting GRIPP index table with pre-and postorder and depth labelled instances of nodes. In this example, nodes A and B have two instances in GRIPP, one tree instance and one non-tree instance. This distinction is important for querying. Fig. <ref type="figure">1</ref>. The graph to index and the resulting GRIPP index table. Nodes A and B have two instances in GRIPP, one tree instance and one non-tree instance</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1">Reachability Queries</head><p>We can answer reachability queries for a given pair of nodes u, w using either a depth-first traversal, querying GRIPP, or the TC. For the depth-first traversal we start at u and query EDGE recursively until we find w. The number of recursive calls to answer reachability queries using depth-first traversal may range from 1 call for nodes without outgoing edges to n calls when we have to traverse all nodes of the graph. In contrast, querying the transitive closure only requires one lookup in the index table.</p><p>For GRIPP the situation is more complicated <ref type="bibr" target="#b16">[17]</ref>. When querying GRIPP we use the tree instance of u, u T to retrieve the reachable instance set of u, RIS(u). RIS(u) contains all instances v , for which u T pre &lt; v pre &lt; u T post holds. We know that all nodes v, which have at least one instance in RIS(u) are reachable from u. But in RIS(u) we may also find non-tree instances, for which we know that there exists some tree instance in the GRIPP index table. To find all reachable nodes of u we have to hop to the tree instance and use this instance and query the GRIPP index table again. We basically have to traverse the GRIPP index recursively until we find w or no further hop node can be used. To make the search more efficient we developed in <ref type="bibr" target="#b16">[17]</ref> heuristics.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2">Path Queries</head><p>To answer path queries we have to define how to represent cycle-free paths. As we want to answer graph queries inside an RDBMS, we represent paths as relation PATHS, which is given in Figure <ref type="figure" target="#fig_1">2</ref>(a). To give you an example how this relation is filled, consider Figure <ref type="figure" target="#fig_1">2(b)</ref>, which contains the tuples for all paths between D and B in the graph from Figure <ref type="figure">1(a)</ref>. To fill relation PATHS we can recursively traverse the graph or query the GRIPP index. We can not use TC, as it does not store intermediate nodes. When using the recursive query strategy we basically traverse the graph using depth-first search starting at u. When we find w during the search, we return the node pair and all intermediate nodes, which are stored during the search, together with their length information.</p><formula xml:id="formula_1">Paths path id start end length node id position (a) PATHS start end length node id position D B 2 D 0 D B 2 G 1 D B 2 B 2 D B 3 D 0 D B 3 H 1 D B 3 A 2 D B 3 B 3<label>(</label></formula><p>But we can also use GRIPP to answer path queries. To find paths with GRIPP we basically use the information already present in the index structure and use every hop node in a RIS. We use the example from Figure <ref type="figure" target="#fig_1">2</ref>(b) to illustrate the search strategy. We start the search at the tree instance of D and add D at position 0 to list path nodes, which stores all intermediate nodes. In RIS(D) we first find an instance of G, which we add to path nodes at 0−2+3 = 1. It is neither a non-tree instance nor B, therefore we use the next instance in RIS(D), which is B, our target node. We return all intermediate nodes of that path and continue by removing B from path nodes. Next, we find H, add it a position 1 and then we find the non-tree instance of A. We add A at position 2 to path nodes and use A as hop node. We now explore all paths in RIS(A), where we find another instance of B and return that path as well. If a length restriction for the paths is given, we only explore paths with up to the given length.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">Estimating Cardinality and Execution Times</head><p>We estimate the size of the result set and the time required to compute it based on simple properties of the graph. In particular, we only use the number of nodes, the number of edges, the highest outdegree, and the number of nodes without any outgoing edge.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.1">Evaluation Method and Data</head><p>We evaluate our estimation using synthetic random and scale-free graphs with varying sizes and densities. On each graph, we executed 1,000 reachability and path queries using randomly chosen node pairs and gathered the size of the result set and query time. We compare these measurements with our estimation functions. Table <ref type="table" target="#tab_0">1</ref> shows properties of these graphs. Note that the maximum outdegree for random graphs only increases slightly with growing number of nodes, while it grows constantly for scale-free. In contrast, the number of nodes with no outgoing edges increases linearly with growing graph sizes in both types. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.2">Reachability Queries</head><p>We estimate for a given set of start and end nodes, with |S| = s and |T | = t, the size of the result set. Clearly, the larger both sets are, the more tuples are returned. But the density of the graph also influences the size of the result set. We can expect that with increasing average node degree the probability of u w will increase, until a saturation occurs. A saturation function is described by (1 − e x ). In our case x is the fraction between additional edges (m − n) and the number of nodes, n. Equation 1 shows the formula for cardinality estimation of reachability queries.</p><formula xml:id="formula_2">Card reach (s, t, n, m) = s • t • (1 − e − m−n n ) (1)</formula><p>The cost estimates must resemble the time required for each algorithm to answer reachability queries for a given pair of nodes. This means, we require three cost functions. Querying the transitive closure is done in constant time. The same is true for GRIPP, as we require on average 2.7 recursive calls, regardless the size or shape of the graph. For the recursive query strategy the situation is more complicated. The query time is proportional to the number of calls. This number in turn depends on the number of nodes in the graph (calls ∼ √ n), the degree and maximum outdegree, x (calls ∼ 1/ ln ((m + x)/n)), and the number of nodes with outdegree 0, z (calls ∼ (n − z)/n). Equation 2 gives the cost estimates for reachability queries. The constant factors c 1 (access cost) and c 2 (CPU cost), which depend on the system setup, may be estimated using test runs on the system.</p><formula xml:id="formula_3">Cost reach(TC ) (s, t) = s • t • c 1 Cost reach(GRIPP) (s, t) = s • t • 2.7 • c 1 Cost reach(recursive) (s, t, n, m, x, z) = s • t • (c 1 + (c 2 • √ n • 1 ln m+x n • n − z n ))<label>(2)</label></formula><p>We evaluate our cardinality and cost functions experimentally. Figures <ref type="figure" target="#fig_2">3(a</ref>) and 3(b) show that the given functions correspond well with the actually observed values for c 1 = 0.0015 and c 2 = 0.00017. Note, there is no distinction between random and scale-free graphs for the size of the result set. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.3">Path Queries</head><p>To estimate the size of the result set for path queries we consider the following. Assume, the graph has an average outdegree of d = 2, thus, for a single start node we find on average 2 nodes, i.e., 2 paths for path length 1, 4 + 2 paths for length 2, 8 + 4 + 2 paths for length 3, and so on. In general for length l we find l 1 d l paths. This would be true for infinite binary trees, but not for general graphs. In general graphs three factors influence the number of paths, which are given in Equation <ref type="formula" target="#formula_4">3</ref>. First, we may hit a node with high outdegree during the search, which will open many new paths. Therefore, the number of outgoing edges, x, of the node with highest degree increases the average outdegree by f (m/n, x) = (x − (m/n))/16. Second, if we find a node without outgoing edges, we must stop. Thus, the number of nodes without outgoing edges z, reduces the number of paths by the factor of (1 − pZero(n, z, l)). The same is true, if we find a node for a second time on a path, which reduces the number of paths by the factor of (1 − pDupl (n, x, l)).</p><formula xml:id="formula_4">Card paths (s, t, n, m, x, z, l) = s • t• l i=1 (l + 1) • m n + f ( m n , x) i • (1 − pZero(n, z, l)) • (1 − pDupl (n, x, l)) with pZero(n, z, l) = l i=1 l! i!(l − i)! • z n i • n − z n l−i pDupl (n, x, l) = l i=2 l! i!(l − i)! • x n i • n − x n l−i<label>(3)</label></formula><p>For both correction factors we assume that each node has the same probability of being added to the path. Thus, we can use the binomial distribution to model the two correction factors. pDupl (n, x, l) represents the probability that we find a node twice in a path of length l, while pZero(n, z, l) represents that we find a node without outgoing edges on a path of length l.</p><p>To answer path length queries we have two different implementations. We can either recursively traverse the graph or query GRIPP. For both implementations it is important how often we read relation EDGE or the GRIPP index. The number of reads is related to the number of paths found and thus, the correction factors applied for the cardinality estimates also apply here. Equation <ref type="formula" target="#formula_5">4</ref>shows the functions to estimate the cost to compute paths up to a certain length. GRIPP requires only (m − n)/m times the number of reads of the recursive strategy as some path information is already stored in the index.</p><formula xml:id="formula_5">Cost paths(GRIPP) (s, t, n, m, x, z, l) = s • t • c 1 • No reads paths (n, m, x, z, l) • (m − n)/m Cost paths(recursive) (s, t, n, m, x, z, l) = s • t • c 1 • No reads paths (n, m, x, z, l) with No reads paths (n, m, x, z, l) = l−1 i=0 m n + f ( m n , x) i • (1 − pZero(n, z, i)) • (1 − pDupl (n, x, i + 1))<label>(4)</label></formula><p>As for reachability queries we experimentally evaluate our cardinality estimates and cost functions. Figure <ref type="figure" target="#fig_3">4</ref>(a) and 4(b) show the experimentally and predicted result sizes. Note, there is a clear difference between the sizes of random and scale-free graphs. We capture this difference in Equation 3 by x, the outdegree of the node with highest degree, which basically means that in scalefree graphs more paths up to a certain length are found due to the nodes with high outdegree. This difference is also reflected in the query time (data not shown), where a query to find all paths up to length 7 for a given pair of nodes requires in random graphs with 1,000 nodes and 2,000 edges on average 90 ms and on scale-free graphs 800 ms using GRIPP. This difference is due to the size of the resulting relation Paths (1.5 tuples compared to 23.3 tuples on average). In comparison, a reachability query for a pair of nodes using GRIPP requires some 4 ms, regardless the size and shape of the graph. Clearly, this fact opens many possibilities for query optimization by query rewriting as it is much cheaper to execute a reachability query for the same set of input nodes than a path query.  </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Conclusion</head><p>In this paper we provide functions to estimate the sizes of result sets and the times to compute these for reachability and path queries. The presented functions require as parameters only easy to compute key features of a graph, such as the number of nodes and edges, the outdegree of the node with highest degree, and the number of nodes without outgoing edges. We verified our proposed functions experimentally on random and scale-free graphs.</p><p>These functions are a key requirement in query optimization. We are currently working to include the presented functions in our graph query optimizer <ref type="bibr" target="#b15">[16]</ref>. This optimizer has rewrite rules that state, in which cases a path query may be rewritten to a reachability query. Based on the cardinality and cost estimates presented here, the optimizer can then decide if query rewriting is beneficial.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Fig. 2 .</head><label>2</label><figDesc>Fig. 2. The relation PATHS to represent all paths of a graph and the resulting relation for all paths between D and B in the graph from Figure 1(a)</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Fig. 3 .</head><label>3</label><figDesc>Fig. 3. The figures show the estimated and actual result sizes and query times for different graphs to answer reachability queries for a given pair of nodes</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Fig. 4 .</head><label>4</label><figDesc>Fig. 4. The figures show the estimated and actual result sizes for different graphs to answer path queries for a given pair of nodes</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>Table 1 .</head><label>1</label><figDesc>Properties of random and scale-free graphs used for evaluation. Figures are averaged over five different graphs for each type and size</figDesc><table><row><cell>No. nodes</cell><cell>No. edges</cell><cell cols="4">Random graphs Max. degree Zero degree Max. degree Zero degree Scale-free graphs</cell></row><row><cell>100</cell><cell>200</cell><cell>6.2</cell><cell>12.0</cell><cell>10.8</cell><cell>14.6</cell></row><row><cell>1,000</cell><cell>2,000</cell><cell>7.8</cell><cell>135.6</cell><cell>28.2</cell><cell>156.4</cell></row><row><cell>10,000</cell><cell>20,000</cell><cell>9.6</cell><cell>1,346.8</cell><cell>91.8</cell><cell>1,567.2</cell></row><row><cell>100,000</cell><cell>200,000</cell><cell>11.2</cell><cell>13,520.2</cell><cell>237.8</cell><cell>15,839.2</cell></row><row><cell>1,000,000</cell><cell>2,000,000</cell><cell>11.6</cell><cell>135,198.0</cell><cell>748.2</cell><cell>158,780.8</cell></row><row><cell>100</cell><cell>100</cell><cell>4.2</cell><cell>37.6</cell><cell>7.2</cell><cell>35.8</cell></row><row><cell>100</cell><cell>200</cell><cell>6.2</cell><cell>12.0</cell><cell>10.8</cell><cell>14.6</cell></row><row><cell>100</cell><cell>300</cell><cell>7.0</cell><cell>4.4</cell><cell>15.4</cell><cell>6.6</cell></row><row><cell>100</cell><cell>400</cell><cell>9.4</cell><cell>1.0</cell><cell>17.6</cell><cell>1.4</cell></row><row><cell>100</cell><cell>500</cell><cell>10.6</cell><cell>0.6</cell><cell>20.0</cell><cell>1.6</cell></row></table></figure>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">Estimating the Selectivity of XML Path Expressions for Internet Scale Applications</title>
		<author>
			<persName><forename type="first">A</forename><surname>Aboulnaga</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">R</forename><surname>Alameldeen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">F</forename><surname>Naughton</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of VLDB</title>
				<meeting>VLDB</meeting>
		<imprint>
			<publisher>Morgan Kaufmann</publisher>
			<date type="published" when="2001">2001</date>
			<biblScope unit="page" from="591" to="600" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Network biology: understanding the cell&apos;s functional organization</title>
		<author>
			<persName><forename type="first">A.-L</forename><surname>Barabási</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><forename type="middle">N</forename><surname>Oltvai</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Nature Reviews Genetics</title>
		<imprint>
			<biblScope unit="volume">5</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="101" to="113" />
			<date type="published" when="2004-02">Feb 2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Cost-Based Query Optimization for Multi Reachability Joins</title>
		<author>
			<persName><forename type="first">J</forename><surname>Cheng</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">X</forename><surname>Yu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Ding</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">DASFAA</title>
		<title level="s">Lecture Notes in Computer Science</title>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="volume">4443</biblScope>
			<biblScope unit="page" from="18" to="30" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<monogr>
		<title level="m" type="main">Introduction to Algorithms</title>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">H</forename><surname>Cormen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">E</forename><surname>Leiserson</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">L</forename><surname>Rivest</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2001">2001</date>
			<publisher>MIT Press</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Two algorithms for maintaining order in a list</title>
		<author>
			<persName><forename type="first">P</forename><surname>Dietz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Sleator</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of STOC</title>
				<meeting>STOC</meeting>
		<imprint>
			<publisher>ACM Press</publisher>
			<date type="published" when="1987">1987</date>
			<biblScope unit="page" from="365" to="372" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">A query language for analyzing networks</title>
		<author>
			<persName><forename type="first">A</forename><surname>Dries</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Nijssen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">De</forename><surname>Raedt</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of ACM SIGMOD</title>
				<meeting>ACM SIGMOD</meeting>
		<imprint>
			<publisher>ACM Press</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="485" to="494" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Extensible Query Processing in Starburst</title>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">M</forename><surname>Haas</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">C</forename><surname>Freytag</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><forename type="middle">M</forename><surname>Lohman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><surname>Pirahesh</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the ACM SIGMOD</title>
				<meeting>the ACM SIGMOD</meeting>
		<imprint>
			<publisher>ACM Press</publisher>
			<biblScope unit="page" from="377" to="388" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Graphs-at-a-time: query language and access methods for graph databases</title>
		<author>
			<persName><forename type="first">H</forename><surname>He</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">K</forename><surname>Singh</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the ACM SIGMOD</title>
				<meeting>the ACM SIGMOD</meeting>
		<imprint>
			<publisher>ACM Press</publisher>
			<date type="published" when="2008">2008</date>
			<biblScope unit="page" from="405" to="418" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Representing and analysing molecular and cellular function using the computer</title>
		<author>
			<persName><surname>Van Helden</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Naim</surname></persName>
		</author>
		<author>
			<persName><surname>Mancuso</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal of Biological Chemistry</title>
		<imprint>
			<biblScope unit="volume">381</biblScope>
			<biblScope unit="issue">9-10</biblScope>
			<biblScope unit="page" from="921" to="935" />
			<date type="published" when="2000">2000</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">The History of Histograms (abridged)</title>
		<author>
			<persName><forename type="first">Y</forename><forename type="middle">E</forename><surname>Ioannidis</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of VLDB</title>
				<meeting>VLDB</meeting>
		<imprint>
			<date type="published" when="2003">2003</date>
			<biblScope unit="page" from="19" to="30" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">A query language for biological networks</title>
		<author>
			<persName><forename type="first">U</forename><surname>Leser</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Bioinformatics</title>
		<imprint>
			<biblScope unit="volume">21</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="33" to="39" />
			<date type="published" when="2005-09">Sep 2005</date>
		</imprint>
	</monogr>
	<note>Suppl</note>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Estimating the Size of Generalized Transitive Closures</title>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">J</forename><surname>Lipton</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">F</forename><surname>Naughton</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of VLDB</title>
				<meeting>VLDB</meeting>
		<imprint>
			<publisher>Morgan Kaufmann</publisher>
			<date type="published" when="1989">1989</date>
			<biblScope unit="page" from="165" to="171" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Query Optimization for XML</title>
		<author>
			<persName><forename type="first">J</forename><surname>Mchugh</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Widom</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of VLDB</title>
				<meeting>VLDB</meeting>
		<imprint>
			<publisher>Morgan Kaufmann</publisher>
			<date type="published" when="1999">1999</date>
			<biblScope unit="page" from="315" to="326" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Pathway databases</title>
		<author>
			<persName><forename type="first">C</forename><surname>Schaefer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Annals of the New York Academy of Sciences</title>
		<imprint>
			<biblScope unit="page" from="77" to="91" />
			<date type="published" when="1020-05">1020. May 2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Tools for visually exploring biological networks</title>
		<author>
			<persName><forename type="first">M</forename><surname>Suderman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Hallett</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Bioinformatics</title>
		<imprint>
			<biblScope unit="volume">23</biblScope>
			<biblScope unit="page" from="2651" to="2659" />
			<date type="published" when="2007">2007</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Cost-based Optimization of Graph Queries</title>
		<author>
			<persName><forename type="first">S</forename><surname>Trißl</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IDAR</title>
				<imprint>
			<date type="published" when="2007">2007</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Fast and Practical Indexing and Querying of Very Large Graphs</title>
		<author>
			<persName><forename type="first">S</forename><surname>Trißl</surname></persName>
		</author>
		<author>
			<persName><forename type="first">U</forename><surname>Leser</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of ACM SIGMOD</title>
				<meeting>ACM SIGMOD</meeting>
		<imprint>
			<publisher>ACM Press</publisher>
			<date type="published" when="2007">2007</date>
			<biblScope unit="page" from="63" to="79" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Using histograms to estimate answer sizes for XML queries</title>
		<author>
			<persName><forename type="first">Y</forename><surname>Wu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jignesh</forename><forename type="middle">M</forename><surname>Patel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">V</forename><surname>Jagadish</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Inf. Syst</title>
		<imprint>
			<biblScope unit="volume">28</biblScope>
			<biblScope unit="issue">1-2</biblScope>
			<biblScope unit="page" from="33" to="59" />
			<date type="published" when="2003">2003</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
