Stasis is a flexible transactional storage library for high-performance applications and system developers. It supports concurrent transactional storage and no-FORCE/STEAL buffer management.
Find a file
2012-04-18 18:18:23 -03:00
benchmarks Refactor page implementation to use multiple include trick (so the backing representation can be changed). 2011-11-09 21:37:38 +00:00
blast forgot to save it the last time... 2005-05-01 22:36:08 +00:00
cmake cmake files for lex and yacc 2008-09-28 06:42:53 +00:00
doc get rid of strange "1" in doxygen output 2011-09-26 00:20:07 +00:00
examples refactor getUpdateArgs; remove a bunch of casts, fix a bunch of warnings 2009-12-31 20:20:47 +00:00
lang fix compiler warning 2011-11-08 02:05:38 +00:00
libdfa do away with librw 2008-11-07 03:44:41 +00:00
m4 Removed inapprorpiate "ERROR" from message, provides debian/ubuntu help. 2007-12-19 03:21:49 +00:00
pbl reordered includes for compatibility with gcc3 2010-01-21 00:03:17 +00:00
pobj fix pobj warning; add pobj tests to cmake 2008-10-02 07:15:35 +00:00
src Refactor page implementation to use multiple include trick (so the backing representation can be changed). 2011-11-09 21:37:38 +00:00
stasis Refactor page implementation to use multiple include trick (so the backing representation can be changed). 2011-11-09 21:37:38 +00:00
test Refactor page implementation to use multiple include trick (so the backing representation can be changed). 2011-11-09 21:37:38 +00:00
utilities remove questionable truncate and append api from handle.c 2011-07-26 19:15:14 +00:00
.cproject add build to eclipse C indexer path 2009-10-05 20:48:30 +00:00
.cvsignore Updated svn:ignore. 2007-10-03 01:52:41 +00:00
.project eclipse project files 2009-05-07 18:33:28 +00:00
AUTHORS remove more cruft 2009-04-18 05:14:07 +00:00
bootstrap silence reconf and bootstrap 2009-04-18 04:33:38 +00:00
clean.sh remove more autotools dribbles and other cruft 2009-04-18 05:36:17 +00:00
CMakeLists.txt experimental java language bindings 2011-11-07 22:46:32 +00:00
config.h.cmake add support for fallocate(); enable it by default if it is available at build time. 2011-08-25 21:29:51 +00:00
configure.in.automake fix automake build 2009-07-30 22:46:56 +00:00
configure.in.lite added installation instructions, more autoconf cleanups 2009-04-18 04:58:51 +00:00
COPYING Initial revision 2004-06-24 21:10:31 +00:00
CTestConfig.cmake Questionable attempts to appease valgrind. 2008-03-14 03:09:29 +00:00
INSTALL more header cleaning; updated INSTALL 2009-07-26 19:47:05 +00:00
Makefile.am add doxygen support to CMake; modify doxyfile for out of tree builds, and automatic CMake manipulation 2009-05-13 19:37:57 +00:00
Makefile.oink support files for oink-based source to source transformations 2011-02-22 19:17:03 +00:00
README Updated README 2012-04-18 18:18:23 -03:00
reconf fixed out of date obsolescence message 2009-07-30 22:27:57 +00:00
reconf-1.8 add -f to rm configure.in commands (fixes flamebox build error message) 2009-04-18 22:09:22 +00:00
reconf-1.9 add -f to rm configure.in commands (fixes flamebox build error message) 2009-04-18 22:09:22 +00:00

Stasis is a transactional storage library.

An increasing range of applications requires robust support for atomic, durable and concurrent transactions. Databases provide the default solution, but force applications to interact via SQL and to forfeit control over data layout and access mechanisms. In principle, a specialized database stack could be built for each application, but such approaches have proven to be impractical. We argue there is a gap between DBMSs and file systems that limits designers of data-oriented applications.

Stasis is a storage framework that incorporates ideas from traditional write-ahead logging algorithms and file systems. It provides applications with flexible control over data structures, data layout, robustness and performance. Stasis enables the development of unforeseen variants on transactional storage by generalizing write-ahead logging algorithms. Instead of implementing support for each new storage system from scratch, I have extended Stasis to provide specialized storage mechanisms to a wide variety of applications. It now provides cleaner semantics than similar application-specific approaches would, with significantly less source code than would be required by multiple separate storage implementations. In addition to the conventional write-ahead logging algorithms that Stasis was designed for, it now provides support for large objects, and for log-structured indexes. A number of other extensions, such as distributed recovery algorithms and snapshot-based recovery are under development.

Please see the COPYING file for licensing information, and INSTALL for
compilation instructions.

More information, including papers, a tutorial and API documentation
are available at:

http://www.cs.berkeley.edu/~sears/stasis/
http://www.eecs.berkeley.edu/Pubs/TechRpts/2010/EECS-2010-2.html
http://www.eecs.berkeley.edu/Pubs/TechRpts/2010/EECS-2010-2.pdf

@phdthesis{Sears:EECS-2010-2,
    Author = {Sears, Russell C},
    Title = {Stasis: Flexible Transactional Storage},
    School = {EECS Department, University of California, Berkeley},
    Year = {2010},
    Month = {Jan},
    URL = {http://www.eecs.berkeley.edu/Pubs/TechRpts/2010/EECS-2010-2.html},
    Number = {UCB/EECS-2010-2},
    Abstract = {An increasing range of applications requires robust support for atomic, durable and concurrent transactions.  Databases provide the default solution, but force applications to interact via SQL and to forfeit control over data layout and access mechanisms.  In principle, a specialized database stack could be built for each application, but such approaches have proven to be impractical.  We argue there is a gap between DBMSs and file systems that limits designers of data-oriented applications.

Stasis is a storage framework that incorporates ideas from traditional write-ahead logging algorithms and file systems.  It provides applications with flexible control over data structures, data layout, robustness and performance.  Stasis enables the development of unforeseen variants on transactional storage by generalizing write-ahead logging algorithms.  Instead of implementing support for each new storage system from scratch, I have extended Stasis to provide specialized storage mechanisms to a wide variety of applications.  It now provides cleaner semantics than similar application-specific approaches would, with significantly less source code than would be required by multiple separate storage implementations.  In addition to the conventional write-ahead logging algorithms that Stasis was designed for, it now provides support for large objects, and for log-structured indexes.  A number of other extensions, such as distributed recovery algorithms and snapshot-based recovery are under development.

This dissertation describes the range of data models and program architectures that have been commonly used in the past, and argues that Stasis is sufficiently general to support most storage applications.  It then turns to a description of Stasis' high-level application interfaces and APIs that are designed to allow applications to add their own transactional data structures to Stasis. The performance of a number of such extensions is evaluated, showing that Stasis performs favorably relative to existing systems.

The dissertation then turns to a careful definition of Stasis' recovery algorithms, and provides a novel generalization of ARIES, the de facto standard approach to transactional storage.  The generalization is particularly promising in the context of distributed systems.  Finally, it presents Stasis' lower-level interfaces, providing systems developers and application designers with the ability to tailor high-level transactional primitives to new types of storage hardware and operating system primitives.  To the greatest extent possible, the ideas presented within are composable, allowing Stasis' simple implementation to support an unusually wide range of storage architectures.}
}