summaryrefslogtreecommitdiff
path: root/db/docs/gsg_txn/JAVA/introduction.html
diff options
context:
space:
mode:
Diffstat (limited to 'db/docs/gsg_txn/JAVA/introduction.html')
-rw-r--r--db/docs/gsg_txn/JAVA/introduction.html441
1 files changed, 441 insertions, 0 deletions
diff --git a/db/docs/gsg_txn/JAVA/introduction.html b/db/docs/gsg_txn/JAVA/introduction.html
new file mode 100644
index 000000000..d2315cd21
--- /dev/null
+++ b/db/docs/gsg_txn/JAVA/introduction.html
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+ <title>Chapter 1. Introduction</title>
+ <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
+ <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
+ <link rel="home" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="up" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
+ <link rel="previous" href="preface.html" title="Preface" />
+ <link rel="next" href="recovery-intro.html" title="Recoverability" />
+ </head>
+ <body>
+ <div class="navheader">
+ <table width="100%" summary="Navigation header">
+ <tr>
+ <th colspan="3" align="center">Chapter 1. Introduction</th>
+ </tr>
+ <tr>
+ <td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <th width="60%" align="center"> </th>
+ <td width="20%" align="right"> <a accesskey="n" href="recovery-intro.html">Next</a></td>
+ </tr>
+ </table>
+ <hr />
+ </div>
+ <div class="chapter" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title"><a id="introduction"></a>Chapter 1. Introduction</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <div class="toc">
+ <p>
+ <b>Table of Contents</b>
+ </p>
+ <dl>
+ <dt>
+ <span class="sect1">
+ <a href="introduction.html#txnintro">Transaction Benefits</a>
+ </span>
+ </dt>
+ <dd>
+ <dl>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#sysfailure">A Note on System Failure</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#apireq">Application Requirements</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect2">
+ <a href="introduction.html#multithread-intro">Multi-threaded
+ and Multi-process
+ Applications</a>
+ </span>
+ </dt>
+ </dl>
+ </dd>
+ <dt>
+ <span class="sect1">
+ <a href="recovery-intro.html">Recoverability</a>
+ </span>
+ </dt>
+ <dt>
+ <span class="sect1">
+ <a href="perftune-intro.html">Performance Tuning</a>
+ </span>
+ </dt>
+ </dl>
+ </div>
+ <p>
+ This book provides a thorough introduction and discussion on transactions as
+ used with Berkeley DB (DB). It begins by offering a general overview to
+ transactions, the guarantees they provide, and the general application
+ infrastructure required to obtain full transactional protection for your
+ data.
+ </p>
+ <p>
+ This book also provides detailed examples on how to write a
+ transactional application. Both single threaded and multi-threaded <span>(as well as multi-process
+ applications)</span> are discussed. A detailed description of various
+ backup and recovery strategies is included in this manual, as is a
+ discussion on performance considerations for your transactional application.
+ </p>
+ <p>
+ You should understand the concepts from the
+ <span>
+ <i class="citetitle">Getting Started with Berkeley DB</i>
+ </span>
+
+
+ guide before reading this book.
+ </p>
+ <div class="sect1" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h2 class="title" style="clear: both"><a id="txnintro"></a>Transaction Benefits</h2>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ Transactions offer your application's data protection from
+ application or system failures. That is, DB transactions offer
+ your application full ACID support:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ <span class="bold"><b>A</b></span>tomicity
+ </p>
+ <p>
+ Multiple database operations are treated as a single unit of
+ work. Once committed, all write operations performed under
+ the protection of the transaction are saved to your databases.
+ Further, in the event that you abort a transaction, all write
+ operations performed during the transaction are discarded.
+ In this event, your database is left in the state it was in
+ before the transaction began, regardless of the number or
+ type of write operations you may have performed during the
+ course of the transaction.
+ </p>
+ <p>
+ Note that DB transactions can span one or more
+ database handles.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>C</b></span>onsistency
+ </p>
+ <p>
+ Your databases will never see a partially completed
+ transaction. This is true even if your application fails while there are
+ in-progress transactions. If the application or system fails,
+ then either all of the database changes appear when the
+ application next runs, or none of them appear.
+ </p>
+ <p>
+ In other words, whatever consistency requirements your application has will never be violated by DB.
+ If, for example, your application requires every record to include an employee ID, and your
+ code faithfully adds that ID to its database records, then DB will never
+ violate that consistency requirement. The ID will remain in the database records until such a time as your
+ application chooses to delete it.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>I</b></span>solation
+ </p>
+ <p>
+ While a transaction is in progress, your databases will appear
+ to the transaction as if there are no other operations
+ occurring outside of the transaction. That is, operations
+ wrapped inside a transaction will always have a clean and
+ consistent view of your databases. They never have to see
+ updates currently in progress under the protection of another transaction.
+ Note, however, that isolation guarantees can be
+
+ relaxed from the default setting. See
+ <a href="isolation.html">Isolation</a>
+ for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span class="bold"><b>D</b></span>urability
+ </p>
+ <p>
+ Once committed to your databases, your modifications will
+ persist even in the event of an application or system failure.
+ Note that like isolation, your durability guarantee can be
+ relaxed. See <a href="usingtxns.html#nodurabletxn">Non-Durable Transactions</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="sysfailure"></a>A Note on System Failure</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ From time to time this manual mentions that transactions protect your data against 'system or application
+ failure.' This is
+ true up to a certain extent. However, not all failures are created equal and no data protection
+ mechanism can protect you against every conceivable way a computing system can find to die.
+ </p>
+ <p>
+ Generally, when this book talks about protection against failures, it means that
+ transactions offer protection against
+ the likeliest culprits for system and application crashes. So long as your data modifications have been
+ committed to disk, those modifications should persist even if your application or OS subsequently fails.
+ And, even if the application or OS fails in the middle of a transaction commit (or abort), the data on disk
+ should be either in a consistent state, or there should be enough data available to bring
+ your databases into a consistent state (via a recovery procedure, for example). You may, however,
+ lose whatever data you were committing at the
+ time of the failure, but your databases will be otherwise unaffected.
+ </p>
+ <p>
+ Of course, if your <span class="emphasis"><em>disk</em></span> fails, then the transactional benefits described in this book
+ are only as good as the backups you have taken.
+ <span>
+ By spreading your data and log files across separate disks,
+ you can minimize the risk of data loss due to a disk failure, but even in this case it is possible to
+ conjure a scenario where even this protection is insufficient (a fire in the machine room, for example) and
+ you must go to your backups for protection.
+ </span>
+ </p>
+ <p>
+ Finally, by following the programming examples shown in this book, you can write your code so as to protect
+ your data in the event that your code crashes. However, no programming API can protect you against logic
+ failures in your own code; transactions cannot protect you from simply writing the wrong thing to your
+ databases.
+ </p>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="apireq"></a>Application Requirements</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ In order to use transactions, your application has certain
+ requirements beyond what is required of non-transactional protected
+ applications. They are:
+ </p>
+ <div class="itemizedlist">
+ <ul type="disc">
+ <li>
+ <p>
+ Environments.
+ </p>
+ <p>
+ Environments are optional for non-transactional
+ applications, but they are required for transactional
+ applications.
+ </p>
+ <p>
+ Environment usage is described in detail in
+ <a href="usingtxns.html">Transaction Basics</a>.
+ </p>
+ </li>
+ <li>
+ <p>
+ Transaction subsystem.
+ </p>
+ <p>
+ In order to use transactions, you must explicitly
+ enable the transactional subsystem for your
+ application, and this must be done at the time that
+ your environment is first created.
+ </p>
+ </li>
+ <li>
+ <p>
+ Logging subsystem.
+ </p>
+ <p>
+ The logging subsystem is required for recovery purposes, but
+ its usage also means your application may require a
+ little more administrative effort than it does when logging
+ is not in use. See <a href="filemanagement.html">Managing DB Files</a> for more information.
+ </p>
+ </li>
+ <li>
+ <p>
+
+
+ <span>Transaction</span>
+
+ handles.
+ </p>
+ <p>
+ In order to obtain the atomicity guarantee offered by
+ the transactional subsystem (that is, combine multiple
+ operations in a single unit of work), your application must use
+ transaction handles. These handles are obtained from your
+
+
+
+ <span>Environment</span>
+ objects. They should normally be short-lived, and their usage is
+ reasonably simple. To complete a transaction and save
+ the work it performed, you
+ call its <tt class="methodname">commit()</tt> method. To
+ complete a transaction and discard its work, you call its
+ <tt class="methodname">abort()</tt> method.
+ </p>
+ <p>
+ In addition, it is possible to use auto commit if you want
+ to transactional protect a single write operation. Auto
+ commit allows a transaction to be used without
+ obtaining an explicit transaction handle. See
+ <a href="autocommit.html">Auto Commit</a>
+ for information on how to use auto commit.
+ </p>
+ </li>
+ <li>
+ <p>
+ <span>Database</span>
+
+ open requirements.
+ </p>
+ <p>
+
+ <span>In addition to using
+ environments and initializing the
+ correct subsystems, your</span>
+
+ application must transaction protect the database
+
+ opens<span>,
+ and any secondary index associations,</span>
+
+ if subsequent operations on the databases are to be transaction
+ protected. The database open and secondary index
+ association are commonly transaction protected using
+ auto commit.
+ </p>
+ </li>
+ <li>
+ <p>
+ Deadlock detection.
+ </p>
+ <p>
+ Typically transactional applications use multiple
+ threads of control when accessing the database. Any
+ time multiple threads are used on a single resource,
+ the potential for lock contention arises. In turn, lock
+ contention can lead to deadlocks. See
+ <a href="blocking_deadlocks.html">Locks, Blocks, and Deadlocks</a>
+ for more information.
+ </p>
+ <p>
+ Therefore, transactional applications must frequently
+ include code for detecting and responding to deadlocks.
+ Note that this requirement is not
+ <span class="emphasis"><em>specific</em></span> to transactions
+ &#8211; you can certainly write concurrent
+ non-transactional DB applications. Further, not
+ every transactional application uses concurrency and
+ so not every transactional application must
+ manage deadlocks. Still, deadlock management is so
+ frequently a characteristic of transactional
+ applications that we discuss it in this
+ book. See <a href="txnconcurrency.html">Concurrency</a>
+ for more information.
+ </p>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div class="sect2" lang="en" xml:lang="en">
+ <div class="titlepage">
+ <div>
+ <div>
+ <h3 class="title"><a id="multithread-intro"></a>Multi-threaded
+ <span>and Multi-process</span>
+ Applications</h3>
+ </div>
+ </div>
+ <div></div>
+ </div>
+ <p>
+ DB is designed to support multi-threaded <span>and
+ multi-process</span> applications, but their usage means
+ you must pay careful attention to issues of concurrency.
+ Transactions help your application's concurrency by providing various levels of
+ isolation for your threads of control. In addition, DB
+ provides mechanisms that allow you to detect and respond to
+ deadlocks (but strictly speaking, this is not limited to just
+ transactional applications).
+ </p>
+ <p>
+ <span class="emphasis"><em>Isolation</em></span> means that database modifications made by
+ one transaction will not normally be seen by readers from another
+ transaction until the first commits its changes. Different threads
+ use different transaction handles, so
+ this mechanism is normally used to provide isolation between
+ database operations performed by different threads.
+ </p>
+ <p>
+ Note that DB supports different isolation levels. For example,
+ you can configure your application to see uncommitted reads, which means
+ that one transaction can see data that has been modified but not yet
+ committed by another transaction. Doing this might mean your
+ transaction reads data &quot;dirtied&quot; by another transaction,
+ but which subsequently might change before that
+ other transaction commits its changes.
+ On the other hand, lowering your isolation
+ requirements means that your application can experience
+ improved throughput due to reduced lock contention.
+ </p>
+ <p>
+ For more information on concurrency, on managing isolation
+ levels, and on deadlock detection, see <a href="txnconcurrency.html">Concurrency</a>.
+ </p>
+ </div>
+ </div>
+ </div>
+ <div class="navfooter">
+ <hr />
+ <table width="100%" summary="Navigation footer">
+ <tr>
+ <td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
+ <td width="20%" align="center">
+ <a accesskey="u" href="index.html">Up</a>
+ </td>
+ <td width="40%" align="right"> <a accesskey="n" href="recovery-intro.html">Next</a></td>
+ </tr>
+ <tr>
+ <td width="40%" align="left" valign="top">Preface </td>
+ <td width="20%" align="center">
+ <a accesskey="h" href="index.html">Home</a>
+ </td>
+ <td width="40%" align="right" valign="top"> Recoverability</td>
+ </tr>
+ </table>
+ </div>
+ </body>
+</html>