http://git-wip-us.apache.org/repos/asf/hbase-site/blob/97d559f1/2.0/acid-semantics.html
----------------------------------------------------------------------
diff --git a/2.0/acid-semantics.html b/2.0/acid-semantics.html
new file mode 100644
index 0000000..ef1eeae
--- /dev/null
+++ b/2.0/acid-semantics.html
@@ -0,0 +1,622 @@
+<!DOCTYPE html>
+<!--
+ | Generated by Apache Maven Doxia Site Renderer 1.6 
+ | Rendered using Apache Maven Fluido Skin 1.5-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 name="Date-Revision-yyyymmdd" content="20180302" />
+    <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.5-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.5-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="license.html"  
title="License">License</a>
+</li>
+                  
+                      <li>      <a 
href="http://www.apache.org/dyn/closer.cgi/hbase/";  
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="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="team-list.html"  title="Team">Team</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="integration.html"  title="Continuous 
Integration">Continuous Integration</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="http://wiki.apache.org/hadoop/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="cygwin.html"  target="_blank" 
title="HBase on Windows">HBase on Windows</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.2 
Documentation">1.2 Documentation</a>
+              <ul class="dropdown-menu">
+                                  <li>      <a href="1.2/apidocs/index.html"  
target="_blank" title="API">API</a>
+</li>
+                                  <li>      <a href="1.2/xref/index.html"  
target="_blank" title="X-Ref">X-Ref</a>
+</li>
+                                  <li>      <a href="1.2/book.html"  
target="_blank" title="Ref Guide (single-page)">Ref Guide (single-page)</a>
+</li>
+                              </ul>
+            </li>
+                  
+                      <li class="dropdown-submenu">
+                                      <a href=""  title="1.1 
Documentation">1.1 Documentation</a>
+              <ul class="dropdown-menu">
+                                  <li>      <a href="1.1/apidocs/index.html"  
target="_blank" title="API">API</a>
+</li>
+                                  <li>      <a href="1.1/xref/index.html"  
target="_blank" title="X-Ref">X-Ref</a>
+</li>
+                                  <li>      <a href="1.1/book.html"  
target="_blank" title="Ref Guide (single-page)">Ref Guide (single-page)</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 = (document.location.protocol == 'https:' ? 'https:' : 
'http:') + '//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="./" 
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" >
+                                  
+            <!-- Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. -->
+  
+    <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;2018
+                        <a href="https://www.apache.org/";>The Apache Software 
Foundation</a>.
+            All rights reserved.      
+                    
+                  <li id="publishDate" class="pull-right">Last Published: 
2018-03-02</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>

Reply via email to