<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8.1 from src/site/xdoc/acid-semantics.xml
 | Rendered using Apache Maven Fluido Skin 1.7.1-HBase
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache HBase &#x2013;  
      Apache HBase (TM) ACID Properties
    </title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.7.1-HBase.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />
    <script type="text/javascript" src="./js/apache-maven-fluido-1.7.1-HBase.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0"></meta>
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap-responsive.min.css"/>
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.9.1/styles/github.min.css"/>
      <link rel="stylesheet" href="css/site.css"/>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.9.1/highlight.min.js"></script>
  </head>
  <body class="topBarEnabled">
    <div id="topbar" class="navbar navbar-fixed-top ">
      <div class="navbar-inner">
            <div class="container">
              <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
                  <span class="icon-bar"></span>
              </a>
              <div class="nav-collapse">
            <ul class="nav">
      <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Apache HBase Project <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="index.html" title="Overview">Overview</a></li>
            <li><a href="https://www.apache.org/licenses/" title="License">License</a></li>
            <li><a href="downloads.html" title="Downloads">Downloads</a></li>
            <li><a href="https://issues.apache.org/jira/browse/HBASE?report=com.atlassian.jira.plugin.system.project:changelog-panel#selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel" title="Release Notes">Release Notes</a></li>
            <li><a href="coc.html" title="Code Of Conduct">Code Of Conduct</a></li>
            <li><a href="http://blogs.apache.org/hbase/" title="Blog">Blog</a></li>
            <li><a href="mail-lists.html" title="Mailing Lists">Mailing Lists</a></li>
            <li><a href="team-list.html" title="Team">Team</a></li>
            <li><a href="https://reviews.apache.org/" title="ReviewBoard">ReviewBoard</a></li>
            <li><a href="sponsors.html" title="HBase Sponsors">HBase Sponsors</a></li>
            <li><a href="https://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
            <li><a href="poweredbyhbase.html" title="Powered by HBase">Powered by HBase</a></li>
            <li><a href="resources.html" title="Other resources">Other resources</a></li>
        </ul>
      </li>
      <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Project Information <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="project-summary.html" title="Project Summary">Project Summary</a></li>
            <li><a href="dependency-info.html" title="Dependency Information">Dependency Information</a></li>
            <li><a href="source-repository.html" title="Source Repository">Source Repository</a></li>
            <li><a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a></li>
            <li><a href="dependency-management.html" title="Dependency Management">Dependency Management</a></li>
            <li><a href="dependencies.html" title="Dependencies">Dependencies</a></li>
            <li><a href="dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a></li>
            <li><a href="plugin-management.html" title="Plugin Management">Plugin Management</a></li>
            <li><a href="plugins.html" title="Plugins">Plugins</a></li>
        </ul>
      </li>
      <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation and API <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="book.html" target="_blank" title="Reference Guide">Reference Guide</a></li>
            <li><a href="apache_hbase_reference_guide.pdf" target="_blank" title="Reference Guide (PDF)">Reference Guide (PDF)</a></li>
            <li><a href="book.html#quickstart" target="_blank" title="Getting Started">Getting Started</a></li>
            <li><a href="apidocs/index.html" target="_blank" title="User API">User API</a></li>
            <li><a href="testapidocs/index.html" target="_blank" title="User API (Test)">User API (Test)</a></li>
            <li><a href="devapidocs/index.html" target="_blank" title="Developer API">Developer API</a></li>
            <li><a href="testdevapidocs/index.html" target="_blank" title="Developer API (Test)">Developer API (Test)</a></li>
            <li><a href="http://abloz.com/hbase/book.html" target="_blank" title="中文参考指南(单页)">中文参考指南(单页)</a></li>
            <li><a href="book.html#faq" target="_blank" title="FAQ">FAQ</a></li>
            <li><a href="book.html#other.info" target="_blank" title="Videos/Presentations">Videos/Presentations</a></li>
            <li><a href="https://cwiki.apache.org/confluence/display/HADOOP2/Hbase" target="_blank" title="Wiki">Wiki</a></li>
            <li><a href="acid-semantics.html" target="_blank" title="ACID Semantics">ACID Semantics</a></li>
            <li><a href="book.html#arch.bulk.load" target="_blank" title="Bulk Loads">Bulk Loads</a></li>
            <li><a href="metrics.html" target="_blank" title="Metrics">Metrics</a></li>
            <li><a href="book.html#replication" target="_blank" title="Cluster replication">Cluster replication</a></li>
            <li class="dropdown-submenu">
<a href="" title="1.4 Documentation">1.4 Documentation</a>
              <ul class="dropdown-menu">
                  <li><a href="1.4/book.html" target="_blank" title="Ref Guide">Ref Guide</a></li>
                  <li><a href="1.4/book.pdf" target="_blank" title="Reference Guide (PDF)">Reference Guide (PDF)</a></li>
                  <li><a href="1.4/apidocs/index.html" target="_blank" title="User API">User API</a></li>
                  <li><a href="1.4/devapidocs/index.html" target="_blank" title="Developer API">Developer API</a></li>
              </ul>
            </li>
            <li class="dropdown-submenu">
<a href="" title="2.3 Documentation">2.3 Documentation</a>
              <ul class="dropdown-menu">
                  <li><a href="2.3/book.html" target="_blank" title="Ref Guide">Ref Guide</a></li>
                  <li><a href="2.3/apache_hbase_reference_guide.pdf" target="_blank" title="Reference Guide (PDF)">Reference Guide (PDF)</a></li>
                  <li><a href="2.3/apidocs/index.html" target="_blank" title="User API">User API</a></li>
                  <li><a href="2.3/testapidocs/index.html" target="_blank" title="User API (Test)">User API (Test)</a></li>
                  <li><a href="2.3/devapidocs/index.html" target="_blank" title="Developer API">Developer API</a></li>
                  <li><a href="2.3/testdevapidocs/index.html" target="_blank" title="Developer API (Test)">Developer API (Test)</a></li>
              </ul>
            </li>
        </ul>
      </li>
      <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">ASF <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="http://www.apache.org/foundation/" target="_blank" title="Apache Software Foundation">Apache Software Foundation</a></li>
            <li><a href="http://www.apache.org/foundation/how-it-works.html" target="_blank" title="How Apache Works">How Apache Works</a></li>
            <li><a href="http://www.apache.org/foundation/sponsorship.html" target="_blank" title="Sponsoring Apache">Sponsoring Apache</a></li>
        </ul>
      </li>
            </ul>
    <div id="search-form" class="navbar-search pull-right">
      <script type="text/javascript">
      var cx = '000385458301414556862:sq1bb0xugjg';

      (function() {
        var gcse = document.createElement('script');
        gcse.type = 'text/javascript';
        gcse.async = true;
        gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
        var s = document.getElementsByTagName('script')[0];
        s.parentNode.insertBefore(gcse, s);
      })();

      </script>
      <gcse:search></gcse:search>
  </div>
            </div>
        </div>
      </div>
    </div>
    <div class="container">
      <div id="banner">
        <div class="pull-left"><a href="./" id="bannerLeft"><img src=""  alt=""/></a></div>
        <div class="pull-right"><a href="http://hbase.apache.org/" id="bannerRight"><img src="images/hbase_logo_with_orca_large.png"  alt="Apache HBase"/></a></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        </ul>
      </div>
        <div id="bodyColumn" >

  
    <div class="section">
<h2><a name="About_this_Document"></a>About this Document</h2>
      
<p>Apache HBase (TM) is not an ACID compliant database. However, it does guarantee certain specific
      properties.</p>
      
<p>This specification enumerates the ACID properties of HBase.</p>
    </div>
    
<div class="section">
<h2><a name="Definitions"></a>Definitions</h2>
      
<p>For the sake of common vocabulary, we define the following terms:</p>
      
<dl>
        
<dt>Atomicity</dt>
        
<dd>an operation is atomic if it either completes entirely or not at all</dd>

        
<dt>Consistency</dt>
        
<dd>
          all actions cause the table to transition from one valid state directly to another
          (eg a row will not disappear during an update, etc)
        </dd>

        
<dt>Isolation</dt>
        
<dd>
          an operation is isolated if it appears to complete independently of any other concurrent transaction
        </dd>

        
<dt>Durability</dt>
        
<dd>any update that reports &quot;successful&quot; to the client will not be lost</dd>

        
<dt>Visibility</dt>
        
<dd>an update is considered visible if any subsequent read will see the update as having been committed</dd>
      </dl>
      
<p>
        The terms <i>must</i> and <i>may</i> are used as specified by RFC 2119.
        In short, the word &quot;must&quot; implies that, if some case exists where the statement
        is not true, it is a bug. The word &quot;may&quot; implies that, even if the guarantee
        is provided in a current release, users should not rely on it.
      </p>
    </div>
    
<div class="section">
<h2><a name="APIs_to_consider"></a>APIs to consider</h2>
      
<ul>
        
<li>Read APIs
        
<ul>
          
<li>get</li>
          
<li>scan</li>
        </ul>
        </li>
        
<li>Write APIs</li>
        
<ul>
          
<li>put</li>
          
<li>batch put</li>
          
<li>delete</li>
        </ul>
        
<li>Combination (read-modify-write) APIs</li>
        
<ul>
          
<li>incrementColumnValue</li>
          
<li>checkAndPut</li>
        </ul>
      </ul>
    </div>

    
<div class="section">
<h2><a name="Guarantees_Provided"></a>Guarantees Provided</h2>

      
<div class="section">
<h2><a name="Atomicity"></a>Atomicity</h2>

        
<ol style="list-style-type: decimal">
          
<li>All mutations are atomic within a row. Any put will either wholly succeed or wholly fail.[3]</li>
          
<ol style="list-style-type: decimal">
            
<li>An operation that returns a &quot;success&quot; code has completely succeeded.</li>
            
<li>An operation that returns a &quot;failure&quot; code has completely failed.</li>
            
<li>An operation that times out may have succeeded and may have failed. However,
            it will not have partially succeeded or failed.</li>
          </ol>
          
<li> This is true even if the mutation crosses multiple column families within a row.</li>
          
<li> APIs that mutate several rows will _not_ be atomic across the multiple rows.
          For example, a multiput that operates on rows 'a','b', and 'c' may return having
          mutated some but not all of the rows. In such cases, these APIs will return a list
          of success codes, each of which may be succeeded, failed, or timed out as described above.</li>
          
<li> The checkAndPut API happens atomically like the typical compareAndSet (CAS) operation
          found in many hardware architectures.</li>
          
<li> The order of mutations is seen to happen in a well-defined order for each row, with no
          interleaving. For example, if one writer issues the mutation &quot;a=1,b=1,c=1&quot; and
          another writer issues the mutation &quot;a=2,b=2,c=2&quot;, the row must either
          be &quot;a=1,b=1,c=1&quot; or &quot;a=2,b=2,c=2&quot; and must <i>not</i> be something
          like &quot;a=1,b=2,c=1&quot;.</li>
          
<ol style="list-style-type: decimal">
            
<li>Please note that this is not true _across rows_ for multirow batch mutations.</li>
          </ol>
        </ol>
      </div>
      
<div class="section">
<h2><a name="Consistency_and_Isolation"></a>Consistency and Isolation</h2>
        
<ol style="list-style-type: decimal">
          
<li>All rows returned via any access API will consist of a complete row that existed at
          some point in the table's history.</li>
          
<li>This is true across column families - i.e a get of a full row that occurs concurrent
          with some mutations 1,2,3,4,5 will return a complete row that existed at some point in time
          between mutation i and i+1 for some i between 1 and 5.</li>
          
<li>The state of a row will only move forward through the history of edits to it.</li>
        </ol>

        
<div class="section">
<h2><a name="Consistency_of_Scans"></a>Consistency of Scans</h2>
        
<p>
          A scan is <b>not</b> a consistent view of a table. Scans do
          <b>not</b> exhibit <i>snapshot isolation</i>.
        </p>
        
<p>
          Rather, scans have the following properties:
        </p>

        
<ol style="list-style-type: decimal">
          
<li>
            Any row returned by the scan will be a consistent view (i.e. that version
            of the complete row existed at some point in time) [1]
          </li>
          
<li>
            A scan will always reflect a view of the data <i>at least as new as</i>
            the beginning of the scan. This satisfies the visibility guarantees
          enumerated below.</li>
          
<ol style="list-style-type: decimal">
            
<li>For example, if client A writes data X and then communicates via a side
            channel to client B, any scans started by client B will contain data at least
            as new as X.</li>
            
<li>A scan _must_ reflect all mutations committed prior to the construction
            of the scanner, and _may_ reflect some mutations committed subsequent to the
            construction of the scanner.</li>
            
<li>Scans must include <i>all</i> data written prior to the scan (except in
            the case where data is subsequently mutated, in which case it _may_ reflect
            the mutation)</li>
          </ol>
        </ol>
        
<p>
          Those familiar with relational databases will recognize this isolation level as &quot;read committed&quot;.
        </p>
        
<p>
          Please note that the guarantees listed above regarding scanner consistency
          are referring to &quot;transaction commit time&quot;, not the &quot;timestamp&quot;
          field of each cell. That is to say, a scanner started at time <i>t</i> may see edits
          with a timestamp value greater than <i>t</i>, if those edits were committed with a
          &quot;forward dated&quot; timestamp before the scanner was constructed.
        </p>
        </div>
      </div>
      
<div class="section">
<h2><a name="Visibility"></a>Visibility</h2>
        
<ol style="list-style-type: decimal">
          
<li> When a client receives a &quot;success&quot; response for any mutation, that
          mutation is immediately visible to both that client and any client with whom it
          later communicates through side channels. [3]</li>
          
<li> A row must never exhibit so-called &quot;time-travel&quot; properties. That
          is to say, if a series of mutations moves a row sequentially through a series of
          states, any sequence of concurrent reads will return a subsequence of those states.</li>
          
<ol style="list-style-type: decimal">
            
<li>For example, if a row's cells are mutated using the &quot;incrementColumnValue&quot;
            API, a client must never see the value of any cell decrease.</li>
            
<li>This is true regardless of which read API is used to read back the mutation.</li>
          </ol>
          
<li> Any version of a cell that has been returned to a read operation is guaranteed to
          be durably stored.</li>
        </ol>

      </div>
      
<div class="section">
<h2><a name="Durability"></a>Durability</h2>
        
<ol style="list-style-type: decimal">
          
<li> All visible data is also durable data. That is to say, a read will never return
          data that has not been made durable on disk[2]</li>
          
<li> Any operation that returns a &quot;success&quot; code (eg does not throw an exception)
          will be made durable.[3]</li>
          
<li> Any operation that returns a &quot;failure&quot; code will not be made durable
          (subject to the Atomicity guarantees above)</li>
          
<li> All reasonable failure scenarios will not affect any of the guarantees of this document.</li>

        </ol>
      </div>
      
<div class="section">
<h2><a name="Tunability"></a>Tunability</h2>
        
<p>All of the above guarantees must be possible within Apache HBase. For users who would like to trade
        off some guarantees for performance, HBase may offer several tuning options. For example:</p>
        
<ul>
          
<li>Visibility may be tuned on a per-read basis to allow stale reads or time travel.</li>
          
<li>Durability may be tuned to only flush data to disk on a periodic basis</li>
        </ul>
      </div>
    </div>
    
<div class="section">
<h2><a name="More_Information"></a>More Information</h2>
      
<p>
      For more information, see the <a href="book.html#client">client architecture</a> or <a href="book.html#datamodel">data model</a> sections in the Apache HBase Reference Guide. 
      </p>
    </div>
    
    
<div class="section">
<h2><a name="Footnotes"></a>Footnotes</h2>
      
<p>[1] A consistent view is not guaranteed intra-row scanning -- i.e. fetching a portion of
          a row in one RPC then going back to fetch another portion of the row in a subsequent RPC.
          Intra-row scanning happens when you set a limit on how many values to return per Scan#next
          (See <a class="externalLink" href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html#setBatch(int)">Scan#setBatch(int)</a>).
      </p>

      
<p>[2] In the context of Apache HBase, &quot;durably on disk&quot; implies an hflush() call on the transaction
      log. This does not actually imply an fsync() to magnetic media, but rather just that the data has been
      written to the OS cache on all replicas of the log. In the case of a full datacenter power loss, it is
      possible that the edits are not truly durable.</p>
      
<p>[3] Puts will either wholly succeed or wholly fail, provided that they are actually sent
      to the RegionServer.  If the writebuffer is used, Puts will not be sent until the writebuffer is filled
      or it is explicitly flushed.</p>
      
    </div>

  

        </div>
    </div>
    <hr/>
    <footer>
      <div class="container">
        <div class="row">
            <p>Copyright &copy;2007&#x2013;2021
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-07-20</li>
</p>
        </div>
        <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
</p>
      </div>
    </footer>
  </body>
</html>
