<?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">Fault Tolerant Distributed Join Algorithm in RDBMS</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Arsen</forename><surname>Nasibullin</surname></persName>
							<email>nevskyarseny@yandex.ru</email>
							<affiliation key="aff0">
								<orgName type="institution">Saint-Petersburg State University</orgName>
							</affiliation>
						</author>
						<title level="a" type="main">Fault Tolerant Distributed Join Algorithm in RDBMS</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">82F1D57EE6F9A0D3D2218EF3025976FA</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-25T09:13+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>
			<textClass>
				<keywords>
					<term>Databases</term>
					<term>Join</term>
					<term>Query processing</term>
					<term>Fault tolerance</term>
					<term>Replication</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Many of applications use vast volume of data for computing in business intelligence applications. Mostly, these applications handle queries with such operators as aggregation and join. State-of-the-art distributed RDBMS get over these tasks in assumption no errors occur. Unfortunately, distributed database management systems suffer from failures. Failures causes queries with joining large tables re-execute so that enormous volume of resources must be leveraged.</p><p>In this paper we propose a new fault tolerant join algorithm for distributed RDBMS. The results which have been already obtained and a detailed plan of further research are discussed.</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>Nowadays, known RDBMS work with assumption that no any kind of failures may occur. If a database fails, query should be re-executed. In this work, we assume that a client runs query with join over enormous value of data of two tables dispersed among many servers.</p><p>Distributed systems based on Map-Reduce were invented to assist handling vast volume of data on unstable distributed systems. Such kind of systems do not interrupt the execution of query. Instead, they re-execute a part of failed sub-tasks. Unfortunately, Map-Reduce systems do not do it in the best way <ref type="bibr" target="#b0">[1]</ref>.</p><p>The goal of this research is to come up with and implement a fault tolerant distributed join algorithm for unstable RDBMS. Existent RDBMS solutions do not fit to be used because of queries have to be re-executed in case of failure occurrence. Map-Reduce solutions are capable of recovering failed tasks but do not do it effectively. The main task of our work is to seek an intermediate solution.</p><p>This paper is organized as follows. Section 2 defines the key terms and notations used in this work. Problem statement and research questions are defined in Section 3. Section 4 provides a review of state of the art related work. Research process, results and further plans are described in Sections 5 and 6. This paper is concluded by Section 7.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2">The Key Terms and Notations Used</head><p>The following definitions and notations are used in this paper. Consider the definition of distributed database systems. Distributed database systems are database management systems, consisting of local database systems. Each of these local databases has its disks. Databases are located and dispersed over a network of interconnected computers. In this paper, the configuration of system is based on shared-nothing architecture. There is the single entry point named coordinator. It receives client queries and returns an outcome of an executed query. Keepers are nodes where data is stored. Workers are nodes where join operation is performed. |W | stands for amount of workers in the configuration of a system. R,S are relations to be joined. In this paper under classical algorithm will be often assumed classical, unstable, distributed join algorithm.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3">Problem Statement</head><p>There are a few causes the classical distributed join may interrupt <ref type="bibr" target="#b1">[2,</ref><ref type="bibr" target="#b2">3]</ref>.</p><p>-The coordinator became unreachable because of a communication or a system failure. -A media or system failure occurred at a keeper or a worker site.</p><p>-A site was suddenly turned off during the performing of query.</p><p>In this work, the main focus is on coming up with an algorithm which could detect and properly handle causes listed above. The following algorithms of parallel distributed join <ref type="bibr" target="#b3">[4]</ref><ref type="bibr" target="#b4">[5]</ref><ref type="bibr" target="#b5">[6]</ref><ref type="bibr" target="#b6">[7]</ref> for different sort of systems are used in assumption that a system is fail-free. Examined works do not consider task of handling failures from the list above. In contrast to fail-free RDBMS algorithm, there are many research efforts <ref type="bibr" target="#b7">[8]</ref> are dedicated to Hadoop for detecting and proper handling of failures.</p><p>Based on the said above, the following research questions are defined in this paper:</p><p>-Will doubling tasks increase execution time of query with join? -What patterns and mechanisms exist for identifying and monitoring the availability of a site? -How effectively do existent fault tolerant algorithms of Hadoop do their work? -How data replication can be used in order to design and implement fault tolerant join algorithm?</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4">State of the Art</head><p>Two main parts of this work to be considered -join algorithms in Map-Reduce and RDBMS, and mechanisms ensuring fault-tolerance.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.1">Join algorithms</head><p>The competitive analysis and description of join algorithms of Map-Reduce are presented in works <ref type="bibr" target="#b8">[9,</ref><ref type="bibr" target="#b9">10]</ref>.</p><p>Repartition join is a simple algorithm which performs data pre-processing in Map phase, and direct join is done during the Reduce phase. The algorithm has several drawbacks: the algorithm is more time consuming and it requires a lot of memory during the reduce phase. Repartition join is widely used in <ref type="bibr" target="#b10">[11]</ref>.</p><p>Broadcast join does the following. It populates the smaller input and proceeds joining during map phase. The disadvantage of this algorithm is that if a smaller input does not fit into memory to build a hash-table, an additional joining phase must be performed <ref type="bibr" target="#b9">[10]</ref>. This algorithm is used in Hadoop Pig <ref type="bibr" target="#b11">[12]</ref>.</p><p>Semi-join algorithm is used to prevent transferring data that does not take part in join phase. Approach of deleting unused tuples reduces amount of data to be submitted and joined. The disadvantage of this algorithm is that an extra phase is required to perform joining. Moreover, additional scanning is needed to drop out unwanted data.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.2">Fault-tolerance mechanisms</head><p>In work <ref type="bibr" target="#b12">[13]</ref> authors proposed a strategy of doubling each task during the query execution. This stands for if one of the tasks fails, the second backup task will end up on time. It reduces the job completion time by using larger amounts of resources. Tasks are doubled at map and reduce phases. Readers may guess that doubling the tasks leads to approximately doubling the resources.</p><p>Haopeng Chen and Hao Zhu proposed two strategies to improve the failure detection in Hadoop via heartbeat messages in the worker side <ref type="bibr" target="#b13">[14]</ref>. The first strategy is an adaptive interval which dynamically configures the expiry time adapted to the various sizes of jobs. The second strategy is to evaluate the reputation of each worker according the reports of the failed fetch-errors from each worker. If a worker failures, it lows its reputation. Once the reputation becomes equal to some bound, the master node marks this worker as failed. Another taking research <ref type="bibr" target="#b14">[15]</ref> proposes a solution based on consensus algorithm Raft. The key point of a system is that each node periodically transfers messages with metadata to other sites. During the execution of a client query, a quorum must take place to handle a client query fully. Raft algorithm is successfully applied in well-known distributed system CockroachDB <ref type="bibr">[16]</ref>.</p><p>To remove single point of failure in Hadoop, a new approach of a metadata replication was proposed in <ref type="bibr" target="#b15">[17]</ref>. The solution involves three major phases. In initialization phase, each secondary node is registered to primary node and its initial metadata is caught up with active/primary node. At replication phase, such metadata as outstanding operations and lease states are replicated across all sites. During the fail-over phase, standby/new elected primary node takes over all communications.</p><p>To defend stored data from being crashed or lost, mechanism of full data replication has to used. Initially, data can be horizontally partitioned. As example, PostgreSQL [18] provides model of streaming replication. There are two roles defined in replication mechanism. The first role is master. The master server receives client queries, gathers data from others servers and populates WAL entries across involved servers. The second role is standby. It receives replicated data and stores them in its own disks.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5">Evaluation Plan and Preliminary Results</head><p>Given the problem and research questions, the following plan has been performed:</p><p>1. Conducted a survey of academic works made in this field. Reviewed abilities of state of the art RDBMS and NoSQL solutions. We checked out how these solutions handle fault occurrences. 2. Reviewed distributed hash-join algorithms. Outlined a cost model and then evaluated the distributed algorithm by applying the cost model to reviewed algorithms. Highlighted possible emerging faults during the execution of join algorithms. 3. Come up with the fault tolerant join algorithm. Applied cost model and conducted a comparison of our algorithm with an unstable distributed join algorithm.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.1">Fault Tolerant Distributed Join Algorithm</head><p>As the basement, classical distributed hash-join algorithm has been taken from work <ref type="bibr" target="#b16">[19]</ref>. The fault tolerant distributed hash-join algorithm is similar to classical hash-join for distributed database systems in a shared-nothing architecture.</p><p>1. Building. A coordinator receives a client query. To initiate a build phase, it populates messages with a client query across all nodes. Once messages are sent, the coordinator sets the status of performing a client query as processing for all keepers. 2. Each keeper reads its partitions of relation R, applies a hash function h1 to the join attribute of each attribute. Hash function h1 has its range of values 0...|W | − 1. If a tuple hashes to value i, then it goes to i mod |W | and (i + 1) mod |W | workers. For the latter, a message has to contain message reserved data. Once a keeper ends up reading its partitions of relation R, it notifies the coordinator about the status of work. 3. Each worker builds a hash table, allocated in memory, and fills in it with tuples received from step 2. In this step, each worker uses a different hash function h2 than the one used in step 2. 4. Once all keepers stopped reading their partitions of relation R, the coordinator initiates a probing phase by sending notifications to keepers. 5. Probing. Each keeper reads its partitions of relation S, applies a hash function h1 to the join attribute of each attribute as it does in step 2. If a tuple hashes to value i, then it goes to i mod |W | and (i + 1) mod |W | workers.</p><p>6. Worker i mod |W | receives a tuple of relation S, probes the hash table built in step 2. If so, tuples join and an outcome tuple is generated. The other worker (i + 1) mod |W | puts reserved data into its disk. 7. Once an outcome tuple is generated, a worker sends a heartbeat message to the following worker. In this message, it points a position of the last successfully joined tuple of relation S. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.2">Comparison and Evaluation</head><p>In multi-objective query optimization distributed database systems process finding Pareto set of solutions or the best possible trade-offs among the objective functions <ref type="bibr" target="#b17">[20]</ref>. Objective functions might be total time of query execution, I/O operations, CPU instructions and a number of messages to be transmitted. In this work we found trade-off between the least time of the execution in case of failure occurrence and extra resources needed to recover failed tasks. In distributed database systems the total time of query execution is expressed through mathematical model of weighted average. This model consists of sum of time to perform I/O operations, CPU instructions and time to exchange a number of messages among involved sites. Our work consider evaluating cost of total time of the query execution. Figures <ref type="figure">2, 3</ref> depict time of the execution both algorithms in different cases. The first case is fail-free. Other cases simulate a keeper failed situation, a worker failed and case with failed both keeper and worker. In fail-free case, classical algorithm has benefit in front of fault tolerant algorithm. As for the rest cases, on the average 9% fault tolerant algorithm takes less time to perform a client query even if at least one of site is down. -Define benchmarks to evaluate and compare developed fault tolerant algorithms with existent solutions.</p><p>As example, developed algorithms might be compared with Hadoop Map-Reduce Join algorithms. Evaluation should be performed with different volume of data.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="7">Summary</head><p>In this paper the fault tolerant distributed join algorithm has been proposed. Results of comparison demonstrates that proposed algorithm lead to less time to re-execute a failed task at a failed site than time needed to re-execute the query using classical algorithm. Also future work is provided.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Fig. 1 .</head><label>1</label><figDesc>Fig. 1. Scheme of working of fault tolerant distributed join</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Fig. 2 .Fig. 3 .</head><label>23</label><figDesc>Fig. 2. Comparison of time execution of both algorithms for four cases. T(R) = T(S) = 256</figDesc></figure>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Acknowlegements. Author thanks Boris Novikov for his helpful comments that have significantly improved this paper.</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">A survey of large-scale analytical query processing in mapreduce</title>
		<author>
			<persName><forename type="first">Christos</forename><surname>Doulkeridis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Kjetil</forename><surname>Norvaag</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">The VLDB Journal</title>
		<imprint>
			<biblScope unit="volume">23</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="355" to="380" />
			<date type="published" when="2014-06">June 2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Basic concepts and taxonomy of dependable and secure computing</title>
		<author>
			<persName><forename type="first">Algirdas</forename><surname>Avizienis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jean-Claude</forename><surname>Laprie</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Brian</forename><surname>Randell</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Carl</forename><surname>Landwehr</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Trans. Dependable Secur. Comput</title>
		<imprint>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="11" to="33" />
			<date type="published" when="2004-01">January 2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">The recovery manager of the system r database manager</title>
		<author>
			<persName><forename type="first">Jim</forename><surname>Gray</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Paul</forename><surname>Mcjones</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Mike</forename><surname>Blasgen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Bruce</forename><surname>Lindsay</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Raymond</forename><surname>Lorie</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Tom</forename><surname>Price</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Franco</forename><surname>Putzolu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Irving</forename><surname>Traiger</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Comput. Surv</title>
		<imprint>
			<biblScope unit="volume">13</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="223" to="242" />
			<date type="published" when="1981-06">June 1981</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Multi-core, main-memory joins: Sort vs. hash revisited</title>
		<author>
			<persName><forename type="first">Cagri</forename><surname>Balkesen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Gustavo</forename><surname>Alonso</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jens</forename><surname>Teubner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">Tamer</forename><surname>Özsu</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. VLDB Endow</title>
				<meeting>VLDB Endow</meeting>
		<imprint>
			<date type="published" when="2013-09">September 2013</date>
			<biblScope unit="volume">7</biblScope>
			<biblScope unit="page" from="85" to="96" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Distributed join algorithms on thousands of cores</title>
		<author>
			<persName><forename type="first">Claude</forename><surname>Barthels</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ingo</forename><surname>Müller</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Timo</forename><surname>Schneider</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Gustavo</forename><surname>Alonso</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Torsten</forename><surname>Hoefler</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Proc. VLDB Endow</title>
		<imprint>
			<biblScope unit="volume">10</biblScope>
			<biblScope unit="issue">5</biblScope>
			<biblScope unit="page" from="517" to="528" />
			<date type="published" when="2017-01">January 2017</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">Join and semijoin algorithms for a multiprocessor database machine</title>
		<author>
			<persName><forename type="first">Georges</forename><surname>Gardarin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Patrick</forename><surname>Valduriez</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">ACM Transactions on Database Systems</title>
		<imprint>
			<biblScope unit="volume">9</biblScope>
			<biblScope unit="page" from="3" to="1984" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Main-memory hash joins on modern processor architectures</title>
		<author>
			<persName><forename type="first">J</forename><surname>Teubner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Alonso</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions on Knowledge and Data Engineering</title>
		<imprint>
			<biblScope unit="volume">27</biblScope>
			<biblScope unit="issue">7</biblScope>
			<biblScope unit="page" from="1754" to="1766" />
			<date type="published" when="2015-07">July 2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<title level="m" type="main">Fault Tolerance in MapReduce: A Survey</title>
		<author>
			<persName><forename type="first">Bunjamin</forename><surname>Memishi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Shadi</forename><surname>Ibrahim</surname></persName>
		</author>
		<author>
			<persName><forename type="first">María</forename><surname>Pérez</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Gabriel</forename><surname>Antoniu</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page">10</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">A comparison of join algorithms for log processing in mapreduce</title>
		<author>
			<persName><forename type="first">Spyros</forename><surname>Blanas</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">Vuk</forename><surname>Ercegovac</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jun</forename><surname>Rao</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Eugene</forename><forename type="middle">J</forename><surname>Shekita</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Yuanyuan</forename><surname>Tian</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2010 ACM SIGMOD International Conference on Management of Data, SIGMOD &apos;10</title>
				<meeting>the 2010 ACM SIGMOD International Conference on Management of Data, SIGMOD &apos;10<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Association for Computing Machinery</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="975" to="986" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Comparative study parallel join algorithms for mapreduce environment</title>
		<author>
			<persName><forename type="first">A</forename><surname>Pigul</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Proceedings of the Institute for System Programming of RAS</title>
		<imprint>
			<biblScope unit="volume">23</biblScope>
			<biblScope unit="page" from="285" to="306" />
			<date type="published" when="2012-01">01 2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">Apache</forename><surname>Hive</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<title/>
		<author>
			<persName><forename type="first">Apache</forename><surname>Pig</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<title level="m" type="main">Byzantine fault-tolerant mapreduce: Faults are not just crashes</title>
		<author>
			<persName><forename type="first">Pedro</forename><surname>Costa</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Marcelo</forename><surname>Pasin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Alysson</forename><surname>Bessani</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Miguel</forename><surname>Correia</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2011">11 2011</date>
			<biblScope unit="page" from="32" to="39" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<monogr>
		<title level="m" type="main">Adaptive failure detection via heartbeat under hadoop</title>
		<author>
			<persName><forename type="first">Hao</forename><surname>Zhu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Haopeng</forename><surname>Chen</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2011">2011</date>
			<biblScope unit="page">12</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">In search of an understandable consensus algorithm</title>
		<author>
			<persName><forename type="first">Diego</forename><surname>Ongaro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">John</forename><surname>Ousterhout</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 2014 USENIX Conference on USENIX Annual Technical Conference, USENIX ATC&apos;14</title>
				<meeting>the 2014 USENIX Conference on USENIX Annual Technical Conference, USENIX ATC&apos;14<address><addrLine>Berkeley, CA, USA</addrLine></address></meeting>
		<imprint>
			<publisher>USENIX Association</publisher>
			<date type="published" when="2014">2014</date>
			<biblScope unit="page" from="305" to="320" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Hadoop high availability through metadata replication</title>
		<author>
			<persName><forename type="first">Feng</forename><surname>Wang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jie</forename><surname>Qiu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jie</forename><surname>Yang</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Bo</forename><surname>Dong</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Xinhui</forename><surname>Li</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Ying</forename><surname>Li</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the First International Workshop on Cloud Data Management, CloudDB &apos;09</title>
				<meeting>the First International Workshop on Cloud Data Management, CloudDB &apos;09<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2009">2009</date>
			<biblScope unit="page" from="37" to="44" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Practical skew handling in parallel joins</title>
		<author>
			<persName><forename type="first">David</forename><forename type="middle">J</forename><surname>Dewitt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Jeffrey</forename><forename type="middle">F</forename><surname>Naughton</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Donovan</forename><forename type="middle">A</forename><surname>Schneider</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Seshadri</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 18th International Conference on Very Large Data Bases, VLDB &apos;92</title>
				<meeting>the 18th International Conference on Very Large Data Bases, VLDB &apos;92<address><addrLine>San Francisco, CA, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Morgan Kaufmann Publishers Inc</publisher>
			<date type="published" when="1992">1992</date>
			<biblScope unit="page" from="27" to="40" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">Multi-objective parametric query optimization for distributed database systems</title>
		<author>
			<persName><forename type="first">Vikram</forename><surname>Singh</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of Fifth International Conference on Soft Computing for Problem Solving</title>
				<editor>
			<persName><forename type="first">Millie</forename><surname>Pant</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Kusum</forename><surname>Deep</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Chand</forename><surname>Jagdish</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Atulya</forename><surname>Bansal</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Kedar</forename><forename type="middle">Nath</forename><surname>Nagar</surname></persName>
		</editor>
		<editor>
			<persName><surname>Das</surname></persName>
		</editor>
		<meeting>Fifth International Conference on Soft Computing for Problem Solving<address><addrLine>Singapore</addrLine></address></meeting>
		<imprint>
			<publisher>Springer Singapore</publisher>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="219" to="233" />
		</imprint>
	</monogr>
</biblStruct>

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