edits
This commit is contained in:
parent
d40ba83388
commit
1cb0e73767
2 changed files with 9 additions and 10 deletions
Binary file not shown.
|
@ -509,8 +509,7 @@ make it easy to implement custom data structures for use within safe,
|
||||||
multi-threaded transactions. Clearly, an additional mechanism is needed.
|
multi-threaded transactions. Clearly, an additional mechanism is needed.
|
||||||
|
|
||||||
The solution is to allow portions of an operation to ``commit'' before
|
The solution is to allow portions of an operation to ``commit'' before
|
||||||
the operation returns.
|
the operation returns.\footnote{We considered the use of nested top actions, which LLADD could easily
|
||||||
\footnote{We considered the use of nested top actions, which LLADD could easily
|
|
||||||
support. However, we currently use the slightly simpler (and lighter-weight)
|
support. However, we currently use the slightly simpler (and lighter-weight)
|
||||||
mechanism described here. If the need arises, we will add support
|
mechanism described here. If the need arises, we will add support
|
||||||
for nested top actions.}
|
for nested top actions.}
|
||||||
|
@ -565,7 +564,7 @@ such a tool could easily be applied to existing LLADD operations.
|
||||||
|
|
||||||
Note that the ARIES algorithm is extremely complex, and we have left
|
Note that the ARIES algorithm is extremely complex, and we have left
|
||||||
out most of the details needed to understand how ARIES works, or to
|
out most of the details needed to understand how ARIES works, or to
|
||||||
implement it correctly.\footnote{The original ARIES paper is around 70 pages, and the ARIES/IM paper~\cite{ariesim}, which coversd index implementation is roughly the same length.} Yet, we believe we have covered everything that a programmer needs
|
implement it correctly.\footnote{The original ARIES paper is around 70 pages, and the ARIES/IM paper~\cite{ariesim}, which covers index implementation is roughly the same length.} Yet, we believe we have covered everything that a programmer needs
|
||||||
to know in order to implement new data structures using the
|
to know in order to implement new data structures using the
|
||||||
functionality that ARIES provides. This was possible due to the encapsulation
|
functionality that ARIES provides. This was possible due to the encapsulation
|
||||||
of the ARIES algorithm inside of LLADD, which is the feature that
|
of the ARIES algorithm inside of LLADD, which is the feature that
|
||||||
|
@ -600,7 +599,7 @@ Currently LLADD imposes two requirements on page layouts. The first
|
||||||
32 bits must contain an LSN for recovery purposes,
|
32 bits must contain an LSN for recovery purposes,
|
||||||
and the second 32 bits must contain the page type (since we allow multple page formats).
|
and the second 32 bits must contain the page type (since we allow multple page formats).
|
||||||
|
|
||||||
Although it ships with basic operations that support variable length
|
Although it ships with basic operations that support variable-length
|
||||||
records, hash tables and other common data types, our goal is to
|
records, hash tables and other common data types, our goal is to
|
||||||
decouple all decisions regarding data format from the implementation
|
decouple all decisions regarding data format from the implementation
|
||||||
of the logging and recovery systems. Therefore, the preceeding section
|
of the logging and recovery systems. Therefore, the preceeding section
|
||||||
|
@ -609,16 +608,16 @@ the purpose of the performance numbers in our evaluation section are
|
||||||
not to validate our hash table, but to show that the underlying architecture
|
not to validate our hash table, but to show that the underlying architecture
|
||||||
is able to efficiently support interesting data structures.
|
is able to efficiently support interesting data structures.
|
||||||
|
|
||||||
Despite the complexity of the interactions between its modules, the
|
Despite the complexity of the interactions among its modules, the
|
||||||
basic ARIES algorithm itself is quite simple. Therefore, in order to
|
basic ARIES algorithm itself is quite simple. Therefore, in order to
|
||||||
keep LLADD simple, we started with a set of modules, and iteratively
|
keep LLADD simple, we started with a set of modules, and iteratively
|
||||||
refined the boundaries between these modules. Figure~\ref{cap:LLADD-Architecture} presents the resulting architecture. The
|
refined the boundaries among these modules. Figure~\ref{cap:LLADD-Architecture} presents the resulting architecture. The
|
||||||
core of the LLADD library is quite small at 2218 lines of code, 2155
|
core of the LLADD library is quite small at 2218 lines of code, 2155
|
||||||
lines of implementations of operations and other extensions, and 408
|
lines of implementations of operations and other extensions, and 408
|
||||||
lines of installable header files.\footnote{These counts were generated using David
|
lines of installable header files.\footnote{These counts were generated using David
|
||||||
A. Wheeler's {\tt SLOCCount}. \cite{sloccount}} The code has been documented extensively,
|
A. Wheeler's {\tt SLOCCount}. \cite{sloccount}} The code has been documented extensively,
|
||||||
and we hope that we have exposed most of the subtle interactions
|
and we hope that we have exposed most of the subtle interactions
|
||||||
between internal modules in the online documentation.
|
among internal modules in the online documentation.
|
||||||
|
|
||||||
As LLADD has evolved, many of its sub-systems have been incrementally
|
As LLADD has evolved, many of its sub-systems have been incrementally
|
||||||
improved, and we believe that the current set of modules is amenable
|
improved, and we believe that the current set of modules is amenable
|
||||||
|
@ -655,7 +654,7 @@ into subsystems with simple interfaces is obvious. We are able to
|
||||||
use standard unit-testing techniques to test each of LLADD's subsystems
|
use standard unit-testing techniques to test each of LLADD's subsystems
|
||||||
independently, and have documented both external and internal interfaces,
|
independently, and have documented both external and internal interfaces,
|
||||||
making it easy to add new tests and debug old ones. Furthermore, by
|
making it easy to add new tests and debug old ones. Furthermore, by
|
||||||
adding a 'simulate crash' operation to a few of the key components,
|
adding a ``simulate crash'' operation to a few of the key components,
|
||||||
we can simulate application level crashes by clearing LLADD's internal
|
we can simulate application level crashes by clearing LLADD's internal
|
||||||
state, re-initializing the library and verifying that recovery was
|
state, re-initializing the library and verifying that recovery was
|
||||||
successful. These tests currently cover approximately
|
successful. These tests currently cover approximately
|
||||||
|
@ -679,10 +678,10 @@ A more interesting set of performance requirements are imposed by
|
||||||
multithreaded workloads. Each module of LLADD is reentrant, and a
|
multithreaded workloads. Each module of LLADD is reentrant, and a
|
||||||
C preprocessor directive allows the entire library to be instrumented
|
C preprocessor directive allows the entire library to be instrumented
|
||||||
in order to profile latching behavior, which is useful both for perfomance
|
in order to profile latching behavior, which is useful both for perfomance
|
||||||
tuning and for debugging purposes. A thread that is not involved in
|
tuning and for debugging. A thread that is not involved in
|
||||||
an I/O request never needs to wait for a latch held by a thread that
|
an I/O request never needs to wait for a latch held by a thread that
|
||||||
is waiting for I/O.%
|
is waiting for I/O.%
|
||||||
\footnote{Strictly speaking, this statement is only true for the LLADD's core.
|
\footnote{Strictly speaking, this statement is only true for LLADD's core.
|
||||||
However, there are variants of most popular data structures that allow
|
However, there are variants of most popular data structures that allow
|
||||||
us to preserve these invariants. LLADD can correctly support operations
|
us to preserve these invariants. LLADD can correctly support operations
|
||||||
whether or not they have these properties.%
|
whether or not they have these properties.%
|
||||||
|
|
Loading…
Reference in a new issue