From ca1ced24e64d724d9dcadb4cc09b5f088539ad4e Mon Sep 17 00:00:00 2001 From: Sears Russell Date: Fri, 14 Mar 2008 03:05:29 +0000 Subject: [PATCH] Updated paper. --- doc/rosePaper/rose.bib | 22 ++ doc/rosePaper/rose.tex | 333 +++++++++++++-------- doc/rosePaper/rows-all-data-final.gnumeric | Bin 55023 -> 55023 bytes 3 files changed, 238 insertions(+), 117 deletions(-) diff --git a/doc/rosePaper/rose.bib b/doc/rosePaper/rose.bib index 699df05..4f56acd 100644 --- a/doc/rosePaper/rose.bib +++ b/doc/rosePaper/rose.bib @@ -104,6 +104,28 @@ publisher = {ACM}, address = {New York, NY, USA}, } + + +@InProceedings{stasis, + author = {Russell Sears and Eric Brewer}, + title = {Stasis: Flexible Transactional Storage}, + OPTcrossref = {}, + OPTkey = {}, + booktitle = {OSDI}, + OPTpages = {}, + year = {2006}, + OPTeditor = {}, + OPTvolume = {}, + OPTnumber = {}, + OPTseries = {}, + OPTaddress = {}, + OPTmonth = {}, + OPTorganization = {}, + OPTpublisher = {}, + OPTnote = {}, + OPTannote = {} +} + @Misc{hdBench, key = {Storage Review}, author = {StorageReview.com}, diff --git a/doc/rosePaper/rose.tex b/doc/rosePaper/rose.tex index 7f62d92..ed2539f 100644 --- a/doc/rosePaper/rose.tex +++ b/doc/rosePaper/rose.tex @@ -106,7 +106,7 @@ decision support query availability is more important than update availability. %bottleneck. \rowss throughput is limited by sequential I/O bandwidth. We use -column compression to reduce this bottleneck. Rather than reassemble +compression to reduce this bottleneck. Rather than reassemble rows from a column-oriented disk layout, we adapt existing column compression algorithms to a simple row-oriented data layout. This approach to database compression introduces negligible space overhead @@ -153,7 +153,7 @@ latency, allowing them to sort, or otherwise reorganize data for bulk insertion. \rows is designed to service analytical processing queries over transaction processing workloads in real time. It does so while maintaining an optimal disk layout, and without resorting to -expensive disk or memory arrays or introducing write latency. +expensive disk or memory arrays and without introducing write latency. %% When faced with random access patterns, traditional database %% scalability is limited by the size of memory. If the system's working @@ -200,11 +200,10 @@ considerably less expensive than B-Tree index scans. However, \rows does not provide highly-optimized single tuple lookups requred by an OLTP master database. \rowss random tuple lookups are approximately two times slower than in a conventional B-Tree, and therefore -up to two to three orders of magnitude slower than \rowss tuple -modification primitives. +up to two to three orders of magnitude slower than \rows updates. -During replication, writes are performed without reads, and the overhead of random index probes can easily be offset by -\rowss decreased update range scan costs, especially in situtations where the +During replication, writes can be performed without reading modified data. Therefore, the overhead of random index probes can easily be offset by +\rowss decreased update and range scan costs, especially in situtations where the database master must resort to partitioning or large disk arrays to keep up with the workload. Because \rows provides much greater write throughput than the database master would on comparable hardware, a @@ -269,9 +268,11 @@ compressed pages, and provide random access to compressed tuples will work. Next, we -evaluate \rowss replication performance on a hybrid of the TPC-C and -TPC-H workloads, and demonstrate orders of magnitude improvement over -a MySQL InnoDB B-Tree index. Our performance evaluations conclude +evaluate \rowss replication performance on a weather data, and +demonstrate orders of magnitude improvement over +a MySQL InnoDB B-Tree index. We then introduce a hybrid of the +TPC-C and TPC-H benchmarks that is appropriate for the environments +targeted by \rows. We use this benchmark to evaluate \rowss index scan and lookup performance. Our evaluation concludes with an analysis of our prototype's performance and shortcomings. We defer related work to the end of the paper, as recent research suggests a number of ways in which \rows could be improved. @@ -281,16 +282,20 @@ suggests a number of ways in which \rows could be improved. A \rows replica takes a replication log as input, and stores the changes it contains in a {\em log structured merge} (LSM) tree\cite{lsm}. - -An LSM-Tree is an index method that consists of multiple sub-trees -(components). The smallest component, $C0$ is a memory resident -binary search tree. The next smallest component, $C1$, is a bulk -loaded B-Tree. Updates are inserted directly into $C0$. As $C0$ grows, +\begin{figure} +\centering \epsfig{file=lsm-tree.pdf, width=3.33in} +\caption{The structure of a \rows LSM-tree} +\label{fig:lsm-tree} +\end{figure} +An LSM-Tree is an index method that consists of multiple sub-trees, or +components (Figure~\ref{fig:lsm-tree}). The smallest component, $C0$ is a memory resident +binary search tree that is updated in place. The next-smallest component, $C1$, is a bulk +loaded B-Tree. As $C0$ grows, it is merged with $C1$. The merge process consists of index scans, and produces a new (bulk loaded) version of $C1$ that contains the updates from $C0$. LSM-Trees can have arbitrarily many components, though three components (two on-disk tress) are generally adequate. -The memory-resident component, $C0$, is updated in place. All other +All other components are produced by repeated merges with the next smaller component. Therefore, LSM-Trees are updated without resorting to random disk I/O. @@ -349,7 +354,7 @@ merges and lookups. However, operations on $C0$ are comparatively fast, reducing contention for $C0$'s latch. Recovery, space management and atomic updates to \rowss metadata are -handled by Stasis [XXX cite], an extensible transactional storage system. \rows is +handled by Stasis\cite{stasis}, an extensible transactional storage system. \rows is implemented as a set of custom Stasis page formats and tree structures. %an extension to the transaction system and stores its %data in a conventional database page file. \rows does not use the @@ -359,8 +364,8 @@ implemented as a set of custom Stasis page formats and tree structures. \rows tree components are forced to disk at commit, providing coarse-grained durabilility without generating a significant amount of -log data. \rows data that is updated in place (such as tree component -positions, and index metadata) uses prexisting Stasis transactional +log data. Portions of \rows (such as tree component +positions and index metadata) are updated in place and are stored using prexisting Stasis transactional storage primitives. Tree components are allocated, written, and registered with \rows within a single Stasis transaction. During recovery, any partially written \rows tree components are be @@ -372,13 +377,13 @@ uses the replication log to reapply any transactions lost because of the crash. As far as we know, \rows is the first LSM-Tree implementation. This -section provides an overview of LSM-Trees, and explains how we -quantify the cost of tuple insertions. It then steps through a rough +section provides an overview of LSM-Trees, and +quantifies the cost of tuple insertions. It then steps through a rough analysis of LSM-Tree performance on current hardware (we refer the reader to the original LSM work for a thorough analytical discussion of LSM performance). Finally, we explain how our implementation -provides transactional isolation, exploits hardware parallelism, and -supports crash recovery. The adaptation of LSM-Trees to database +provides transactional isolation and exploits hardware parallelism. +The adaptation of LSM-Trees to database replication is an important contribution of this work, and is the focus of the rest of this section. We defer discussion of compression to the next section. @@ -412,8 +417,7 @@ subtree at a time. This reduces peak storage and memory requirements. Truly atomic replacement of portions of an LSM-Tree would cause ongoing merges to block insertions, and force the mergers to run in lock step. -(This problem is mentioned in the LSM -paper.) We address this issue by allowing data to be inserted into +We address this issue by allowing data to be inserted into the new version of the smaller component before the merge completes. This forces \rows to check both versions of components $C0$ and $C1$ in order to look up each tuple, but it handles concurrency between merge steps @@ -433,33 +437,57 @@ to merge into $C2$. Once a tuple reaches $C2$ it does not contribute to the initiation of more I/O (For simplicity, we assume the LSM-Tree has reached a steady state). -In a populated LSM-Tree $C2$ is the largest component, and $C0$ is the -smallest component. The original LSM-Tree work proves that throughput +%In a populated LSM-Tree $C2$ is the largest component, and $C0$ is the +%smallest component. +The original LSM-Tree work proves that throughput is maximized when the ratio of the sizes of $C1$ to $C0$ is equal to the ratio between $C2$ and $C1$. They call this ratio $R$. Note that -(on average in a steady state) for every $C0$ tuple consumed by a -merge, $R$ tuples from $C1$ must be examined. Similarly, each time a +for every $C0$ tuple consumed by a +merge, an average of $R$ tuples from $C1$ must be examined. Similarly, each time a tuple in $C1$ is consumed, $R$ tuples from $C2$ are examined. -Therefore, in a steady state, insertion rate times the sum of $R * -cost_{read~and~write~C2}$ and $R * cost_{read~and~write~C1}$ cannot -exceed the drive's sequential I/O bandwidth. Note that the total size -of the tree is approximately $R^2 * |C0|$ (neglecting the data stored -in $C0$ and $C1$)\footnote{The proof that keeping R constant across - our three tree components follows from the fact that the mergers - compete for I/O bandwidth and $x(1-x)$ is maximized when $x=0.5$. - The LSM-Tree paper proves the general case.}. +Therefore, in a steady state: +\[size~of~tree\approx~R^2*|C0|\] +and: +\[insertion~rate*R(t_{C2}+t_{C1})\approx~sequential~i/o~cost\] +Where $t_{C1}$ and $t_{C2}$ are the amount of time it takes to read +from and write to C1 and C2, respectively. + +%, insertion rate times the sum of $R * +%cost_{read~and~write~C2}$ and $R * cost_{read~and~write~C1}$ cannot +%exceed the drive's sequential I/O bandwidth. Note that the total size +%of the tree is approximately $R^2 * |C0|$. +% (neglecting the data stored +%in $C0$ and $C1$)\footnote{The proof that keeping R constant across +% our three tree components follows from the fact that the mergers +% compete for I/O bandwidth and $x(1-x)$ is maximized when $x=0.5$. +% The LSM-Tree paper proves the general case.}. \subsection{Replication Throughput} LSM-Trees have different asymptotic performance characteristics than conventional index structures. In particular, the amortized cost of -insertion is $O(\sqrt{n})$ in the size of the data. This cost is -$O(log~n)$ for a B-Tree. The relative costs of sequential and random -I/O determine whether or not \rows is able to outperform B-Trees in -practice. This section describes the impact of compression on B-Tree +insertion is $O(\sqrt{n})$ in the size of the data, and is proportional + to the cost of sequential I/O. In a B-Tree, this cost is +$O(log~n)$ but is proportional to the cost of random I/O. +%The relative costs of sequential and random +%I/O determine whether or not \rows is able to outperform B-Trees in +%practice. +This section describes the impact of compression on B-Tree and LSM-Tree performance using (intentionally simplistic) models of their performance characteristics. +In particular, we assume that the leaf nodes to not fit in memory, and +that tuples are accessed randomly with equal probability. To simplify +our calculations, we assume that internal tree nodes fit in RAM. +Without a skewed update distribution, reordering and batching I/O into +sequential writes only helps if a significant fraction of the tree's +data fits in RAM. Therefore, we do not consider B-Tree I/O batching here. + +%If we assume uniform access patterns, 4 KB pages and 100 byte tuples, +%this means that an uncompressed B-Tree would keep $\sim2.5\%$ of the +%tuples in memory. Prefix compression and a skewed update distribution +%would improve the situation significantly, but are not considered +%here. Starting with the (more familiar) B-Tree case, in the steady state we can expect each index update to perform two random disk accesses (one evicts a page, the other reads a page). Tuple compression does not @@ -467,14 +495,6 @@ reduce the number of disk seeks: \[ cost_{Btree~update}=2~cost_{random~io} \] -(We assume that the upper levels of the B-Tree are memory resident.) If -we assume uniform access patterns, 4 KB pages and 100 byte tuples, -this means that an uncompressed B-Tree would keep $\sim2.5\%$ of the -tuples in memory. Prefix compression and a skewed update distribution -would improve the situation significantly, but are not considered -here. Without a skewed update distribution, batching I/O into -sequential writes only helps if a significant fraction of the tree's -data fits in RAM. In \rows, we have: \[ @@ -580,10 +600,10 @@ in memory, and write approximately $\frac{41.5}{(1-(80/750)} = 46.5$ tuples/sec. Increasing memory further yields a system that is no longer disk bound. -Assuming that the CPUs are fast enough to allow \rows +Assuming that the CPUs are fast enough to allow \rowss compression and merge routines to keep up with the bandwidth supplied by the disks, we conclude that \rows will provide significantly higher -replication throughput for disk bound applications. +replication throughput than seek-bound B-Tree replicas. \subsection{Indexing} @@ -597,8 +617,8 @@ internal tree nodes\footnote{This is a limitation of our prototype; very least, the page ID data is amenable to compression. Like B-Tree compression, this would decrease the memory used by lookups.}, so it writes one tuple into the tree's internal nodes per compressed -page. \rows inherits a default page size of 4KB from the transaction -system we based it upon. Although 4KB is fairly small by modern +page. \rows inherits a default page size of 4KB from Stasis. +Although 4KB is fairly small by modern standards, \rows is not particularly sensitive to page size; even with 4KB pages, \rowss per-page overheads are acceptable. Assuming tuples are 400 bytes, $\sim\frac{1}{10}$th of our pages are dedicated to the @@ -643,10 +663,10 @@ RLE + tree & 1.50x & 6525 \\ %& 148.4 MB/s \\ \hline\end{tabular} \end{table} -As the size of the tuples increases, the number of compressed pages -that each internal tree node points to decreases, increasing the -overhead of tree creation. In such circumstances, internal tree node -compression and larger pages should improve the situation. +%% As the size of the tuples increases, the number of compressed pages +%% that each internal tree node points to decreases, increasing the +%% overhead of tree creation. In such circumstances, internal tree node +%% compression and larger pages should improve the situation. \subsection{Isolation} \label{sec:isolation} @@ -659,10 +679,13 @@ its contents to new queries that request a consistent view of the data. At this point a new active snapshot is created, and the process continues. -The timestamp is simply the snapshot number. In the case of a tie +%The timestamp is simply the snapshot number. +In the case of a tie during merging (such as two tuples with the same primary key and timestamp), the version from the newer (lower numbered) component is -taken. +taken. If a tuple maintains the same primary key while being updated +multiple times within a snapshot, this allows \rows to discard all but +the last update before writing the tuple to disk. This ensures that, within each snapshot, \rows applies all updates in the same order as the primary database. Across snapshots, concurrent @@ -673,7 +696,7 @@ this scheme hinges on the correctness of the timestamps applied to each transaction. If the master database provides snapshot isolation using multiversion -concurrency control (as is becoming increasingly popular), we can +concurrency control, we can simply reuse the timestamp it applies to each transaction. If the master uses two phase locking, the situation becomes more complex, as we have to use the commit time of each transaction\footnote{This assumes @@ -696,49 +719,60 @@ shared lock on the existence of the snapshot, protecting that version of the database from garbage collection. In order to ensure that new snapshots are created in a timely and predictable fashion, the time between them should be acceptably short, but still slightly longer -than the longest running transaction. +than the longest running transaction. Using longer snapshots +increases coalescing of repeated updates to the same tuples, +but increases replication delay. \subsubsection{Isolation performance impact} Although \rowss isolation mechanisms never block the execution of index operations, their performance degrades in the presence of long -running transactions. Long running updates block the creation of new -snapshots. Ideally, upon encountering such a transaction, \rows -simply asks the master database to abort the offending update. It -then waits until appropriate rollback (or perhaps commit) entries -appear in the replication log, and creates the new snapshot. While -waiting for the transactions to complete, \rows continues to process -replication requests by extending snapshot $t$. +running transactions. -Of course, proactively aborting long running updates is simply an -optimization. Without a surly database administrator to defend it -against application developers, \rows does not send abort requests, -but otherwise behaves identically. Read-only queries that are -interested in transactional consistency continue to read from (the -increasingly stale) snapshot $t-2$ until $t-1$'s long running -updates commit. +Long running updates block the creation of new snapshots. Upon +encountering such a transaction, \rows can either wait, or ask the +master database to abort the offending transaction, then wait until +appropriate rollback (or commit) entries appear in the replication +log. While waiting for a long running transaction in snapshot $t-1$ +to complete, \rows continues to process replication requests by +extending snapshot $t$, and services requests for consistent data from +(the increasingly stale) snapshot $t-2$. + +%simply asks the master database to abort the offending update. It +%then waits until appropriate rollback (or perhaps commit) entries +%appear in the replication log, and creates the new snapshot. While +%waiting for the transactions to complete, \rows continues to process +%replication requests by extending snapshot $t$. + +%Of course, proactively aborting long running updates is simply an +%optimization. Without a surly database administrator to defend it +%against application developers, \rows does not send abort requests, +%but otherwise behaves identically. Read-only queries that are +%interested in transactional consistency continue to read from (the +%increasingly stale) snapshot $t-2$ until $t-1$'s long running +%updates commit. Long running queries present a different set of challenges to \rows. -Although \rows provides fairly efficient time-travel support, -versioning databases are not our target application. \rows -provides each new read-only query with guaranteed access to a -consistent version of the database. Therefore, long-running queries -force \rows to keep old versions of overwritten tuples around until -the query completes. These tuples increase the size of \rowss +%Although \rows provides fairly efficient time-travel support, +%versioning databases are not our target application. \rows +%provides each new read-only query with guaranteed access to a +%consistent version of the database. +They force \rows to keep old versions of overwritten tuples around +until the query completes. These tuples increase the size of \rowss LSM-Trees, increasing merge overhead. If the space consumed by old -versions of the data is a serious issue, long running queries should -be disallowed. Alternatively, historical, or long-running queries -could be run against certain snapshots (every 1000th, or the first -one of the day, for example), reducing the overhead of preserving -old versions of frequently updated data. +versions of the data is a serious issue, extremely long running +queries should be disallowed. Alternatively, historical, or +long-running queries could be run against certain snapshots (every +1000th, or the first one of the day, for example), reducing the +overhead of preserving old versions of frequently updated data. \subsubsection{Merging and Garbage collection} \rows merges components by iterating over them in order, garbage collecting obsolete and duplicate tuples and writing the rest into a new version -of the largest component. Because \rows provides snapshot consistency +of the larger component. Because \rows provides snapshot consistency to queries, it must be careful not to collect a version of a tuple that -is visible to any outstanding (or future) queries. Because \rows +is visible to any outstanding (or future) query. Because \rows never performs disk seeks to service writes, it handles deletions by inserting special tombstone tuples into the tree. The tombstone's purpose is to record the deletion event until all older versions of @@ -755,10 +789,14 @@ updated version, then the tuple can be collected. Tombstone tuples can also be collected once they reach $C2$ and any older matching tuples have been removed. -Actual reclamation of pages is handled by the underlying transaction -system; once \rows completes its scan over existing components (and -registers new ones in their places), it tells the transaction system -to reclaim the regions of the page file that stored the old components. +Actual reclamation of pages is handled by Stasis; each time a tree +component is replaced, \rows simply tells Stasis to free the region of +pages that contain the obsolete tree. + +%the underlying transaction +%system; once \rows completes its scan over existing components (and +%registers new ones in their places), it tells the transaction system +%to reclaim the regions of the page file that stored the old components. \subsection{Parallelism} @@ -773,11 +811,10 @@ components do not interact with the merge processes. Our prototype exploits replication's pipelined parallelism by running each component's merge process in a separate thread. In practice, this allows our prototype to exploit two to three processor cores -during replication. Remaining cores could be used by queries, or (as -hardware designers increase the number of processor cores per package) +during replication. Remaining cores could be used by queries, or by using data parallelism to split each merge across multiple threads. Therefore, we expect the throughput of \rows replication to increase -with bus and disk bandwidth for the forseeable future. +with compresion ratios and I/O bandwidth for the forseeable future. %[XXX need experimental evidence...] During bulk %load, the buffer manager, which uses Linux's {\tt sync\_file\_range} @@ -825,10 +862,12 @@ with bus and disk bandwidth for the forseeable future. the effective size of the buffer pool. Conserving storage space is of secondary concern. Sequential I/O throughput is \rowss primary replication and table scan bottleneck, and is proportional to the -compression ratio. Furthermore, compression increases the effective -size of the buffer pool, which is the primary bottleneck for \rowss -random index lookups. Because \rows never updates data in place, it -is able to make use of read-only compression formats. +compression ratio. The effective +size of the buffer pool determines the size of the largest read set +\rows can service without resorting to random I/O. +Because \rows never updates data in place, it +is able to make use of read-only compression formats that cannot be +efficiently applied to B-Trees. %% Disk heads are the primary %% storage bottleneck for most OLTP environments, and disk capacity is of @@ -838,7 +877,11 @@ is able to make use of read-only compression formats. %% is proportional to the compression ratio. Although \rows targets row-oriented updates, this allow us to use compression -techniques from column-oriented databases. These techniques often rely on the +techniques from column-oriented databases. This is because, like column-oriented +databases, \rows can provide sorted, projected data to its index implementations, +allowing it to take advantage of bulk loading mechanisms. + +These techniques often rely on the assumptions that pages will not be updated and are indexed in an order that yields easily compressible columns. \rowss compression formats are based on our {\em multicolumn} compression format. In order to store data from @@ -847,7 +890,12 @@ regions. $N$ of these regions each contain a compressed column. The remaining region contains ``exceptional'' column data (potentially from more than one column). -XXX figure here!!! +\begin{figure} +\centering \epsfig{file=multicolumn-page-format.pdf, width=3in} +\caption{Multicolumn page format. Column compression algorithms +are treated as plugins, and can coexist on a single page. Tuples never span multiple pages.} +\label{fig:mc-fmt} +\end{figure} For example, a column might be encoded using the {\em frame of reference} (FOR) algorithm, which stores a column of integers as a @@ -858,14 +906,13 @@ stores data from a single column, the resulting algorithm is MonetDB's {\em patched frame of reference} (PFOR)~\cite{pfor}. \rowss multicolumn pages extend this idea by allowing multiple columns -(each with its own compression algorithm) to coexist on each page. -[XXX figure reference here] +(each with its own compression algorithm) to coexist on each page (Figure~\ref{fig:mc-fmt}). This reduces the cost of reconstructing tuples during index lookups, and yields a new approach to superscalar compression with a number of new, and potentially interesting properties. We implemented two compression formats for \rowss multicolumn pages. -The first is PFOR, the other is {\em run length encoding}, which +The first is PFOR, the other is {\em run length encoding} (RLE), which stores values as a list of distinct values and repetition counts. We chose these techniques because they are amenable to superscalar implementation techniques; our implemetation makes heavy use of C++ @@ -942,9 +989,11 @@ multicolumn format. \rowss compressed pages provide a {\tt tupleAppend()} operation that takes a tuple as input, and returns {\tt false} if the page does not have room for the new tuple. {\tt tupleAppend()} consists of a dispatch -routine that calls {\tt append()} on each column in turn. Each -column's {\tt append()} routine secures storage space for the column -value, or returns {\tt false} if no space is available. {\tt append()} has the +routine that calls {\tt append()} on each column in turn. +%Each +%column's {\tt append()} routine secures storage space for the column +%value, or returns {\tt false} if no space is available. +{\tt append()} has the following signature: \begin{quote} {\tt append(COL\_TYPE value, int* exception\_offset, @@ -1108,7 +1157,7 @@ used instead of 20 byte tuples. We plan to extend Stasis with support for variable length pages and pageless extents of disk. Removing page boundaries will eliminate -this problem and allow a wider variety of page formats. +this problem and allow a wider variety of compression formats. % XXX graph of some sort to show this? @@ -1144,8 +1193,7 @@ offset of the first and last instance of the value within the range. This operation is $O(log~n)$ (in the number of slots in the range) for frame of reference columns, and $O(log~n)$ (in the number of runs on the page) for run length encoded columns\footnote{For simplicity, -our prototype does not include these optimizations; rather than using -binary search, it performs range scans.}. The multicolumn +our prototype performs range scans instead of using binary search.}. The multicolumn implementation uses this method to look up tuples by beginning with the entire page in range, and calling each compressor's implementation in order to narrow the search until the correct tuple(s) are located @@ -1310,9 +1358,8 @@ bottlenecks\footnote{In the process of running our experiments, we \rows outperforms B-Tree based solutions, as expected. However, the prior section says little about the overall quality of our prototype -implementation. In this section, we measure update latency, compare -our implementation's performance with our simplified analytical model, -and discuss the effectiveness of \rowss compression mechanisms. +implementation. In this section, we measure update latency and compare +our implementation's performance with our simplified analytical model. Figure~\ref{fig:inst-thru} reports \rowss replication throughput averaged over windows of 100,000 tuple insertions. The large downward @@ -1364,6 +1411,51 @@ from memory fragmentation and again doubles $C0$'s memory requirements. Therefore, in our tests, the prototype was wasting approximately $750MB$ of the $1GB$ we allocated to $C0$. +\subsection{TPC-C / H throughput} + +TPC-H is an analytical processing benchmark that targets periodically +bulk-loaded data warehousing systems. In particular, compared to +TPC-C, it de-emphasizes transaction processing and rollback, and it +allows database vendors to ``permute'' the dataset off-line. In +real-time database replication environments, faithful reproduction of +transaction processing schedules is important. Also, there is no +opportunity to resort data before making it available to queries; data +arrives sorted in chronological order, not in index order. + +Therefore, we modify TPC-H to better model our target workload. We +follow the approach of XXX; and start with a pre-computed join and +projection of the TPC-H dataset. We sort the dataset chronologically, +and add transaction rollbacks, line item delivery transactions, and +order status queries. Order status queries happen with a delay of 1.3 times +the order processing time (if an order takes 10 days +to arrive, then we perform order status queries within the 13 day +period after the order was initiated). Therefore, order status +queries have excellent temporal locality, and are serviced +through $C0$. These queries have minimal impact on replication +throughput, as they simply increase the amount of CPU time between +tuple insertions. Since replication is disk bound, the time spent +processing order status queries overlaps I/O wait time. + +Although TPC's order status queries showcase \rowss ability to service +certain tree lookups ``for free,'' they do not provide an interesting +evaluation of \rowss tuple lookup behavior. Therefore, our order status queries reference +non-existent orders, forcing \rows to go to disk in order to check components +$C1$ and $C2$. [XXX decide what to do here. -- write a version of find() that just looks at C0??] + +The other type of query we process is a variant of XXX's ``group +orders by customer id'' query. Instead of grouping by customer ID, we +group by (part number, part supplier), which has greater cardinality. +This query is serviced by a table scan. We know that \rowss +replication throughput is significantly lower than its sequential +table scan throughput, so we expect to see good scan performance for +this query. However, these sequential scans compete with merge +processes for I/O bandwidth\footnote{Our prototype \rows does not + attempt to optimize I/O schedules for concurrent table scans and + merge processes.}, so we expect them to have a measurable impact on +replication throughput. + +XXX results go here. + Finally, note that the analytical model's predicted throughput increases with \rowss compression ratio. Sophisticated, high-speed compression routines achieve 4-32x compression ratios on TPC-H data, @@ -1406,7 +1498,7 @@ standard B-Tree optimizations (such as prefix compression and bulk insertion) would benefit LSM-Tree implementations. \rows uses a custom tree implementation so that it can take advantage of compression. Compression algorithms used in B-Tree implementations must provide for -efficient, in place updates of tree nodes. The bulk-load update of +efficient, in-place updates of tree nodes. The bulk-load update of \rows updates imposes fewer constraints upon our compression algorithms. @@ -1515,10 +1607,17 @@ producing multiple LSM-Trees for a single table. Unlike read-optimized column-oriented databases, \rows is optimized for write throughput, and provides low-latency, in-place updates. -This property does not come without cost; compared to a column -store, \rows must merge replicated data more often, achieves lower -compression ratios, and performs index lookups that are roughly twice -as expensive as a B-Tree lookup. +However, many column storage techniques are applicable to \rows. Any +column index that supports efficient bulk-loading, can produce data in +an order appropriate for bulk-loading, and can be emulated by an +update-in-place, in-memory data structure can be implemented within +\rows. This allows us to convert existing, read-only index structures +for use in real-time replication scenarios. + +%This property does not come without cost; compared to a column +%store, \rows must merge replicated data more often, achieves lower +%compression ratios, and performs index lookups that are roughly twice +%as expensive as a B-Tree lookup. \subsection{Snapshot consistency} diff --git a/doc/rosePaper/rows-all-data-final.gnumeric b/doc/rosePaper/rows-all-data-final.gnumeric index c443f0285a3331cc9ca1ebfcb7c5e87c4b9666e5..4a32bf897426c5f8f4c179720260df780a5db645 100644 GIT binary patch literal 55023 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 DwPCD4 literal 55023 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 J&0jd!{2y11Ud;di