You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ch...@apache.org on 2017/03/27 10:24:13 UTC

svn commit: r1788880 [3/9] - in /jackrabbit/site/live/oak/docs: ./ architecture/ coldstandby/ features/ nodestore/ nodestore/document/ nodestore/segment/ oak-mongo-js/ oak-mongo-js/scripts/ oak-mongo-js/scripts/prettify/ oak-mongo-js/styles/ oak_api/ p...

Added: jackrabbit/site/live/oak/docs/nodestore/document/node-bundling.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/nodestore/document/node-bundling.html?rev=1788880&view=auto
==============================================================================
--- jackrabbit/site/live/oak/docs/nodestore/document/node-bundling.html (added)
+++ jackrabbit/site/live/oak/docs/nodestore/document/node-bundling.html Mon Mar 27 10:24:11 2017
@@ -0,0 +1,927 @@
+<!DOCTYPE html>
+<!--
+ | Generated by Apache Maven Doxia at 2017-03-27
+ | Rendered using Apache Maven Fluido Skin 1.3.0
+-->
+<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="20170327" />
+    <meta http-equiv="Content-Language" content="en" />
+    <title>Jackrabbit Oak - Bundling Nodes</title>
+    <link rel="stylesheet" href="../../css/apache-maven-fluido-1.3.0.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.3.0.min.js"></script>
+
+    
+            </head>
+        <body class="topBarEnabled">
+          
+    
+    
+            
+    
+    
+    <a href="http://github.com/apache/jackrabbit-oak">
+      <img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
+        src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"
+        alt="Fork me on GitHub">
+    </a>
+  
+                
+                    
+                
+
+    <div id="topbar" class="navbar navbar-fixed-top ">
+      <div class="navbar-inner">
+                <div class="container-fluid">
+        <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>
+                
+                                                                                <a class="brand" href="../../"  title="Oak logo">
+
+                                
+                                                                                                                    <img src="../../oak_logo.png" alt="Oak logo" />
+                
+                </a>
+                    
+                                <ul class="nav">
+                          <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Overview <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="../../index.html"  title="Jackrabbit Oak">Jackrabbit Oak</a>
+</li>
+                  
+                      <li>      <a href="../../license.html"  title="License">License</a>
+</li>
+                  
+                      <li>      <a href="../../downloads.html"  title="Downloads">Downloads</a>
+</li>
+                  
+                      <li>      <a href="../../articles.html"  title="Articles">Articles</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Concepts and Architecture <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="../../architecture/overview.html"  title="Overview">Overview</a>
+</li>
+                  
+                      <li>      <a href="../../architecture/nodestate.html"  title="The Node State Model">The Node State Model</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Main APIs <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="http://www.day.com/specs/jcr/2.0/index.html"  title="JCR API">JCR API</a>
+</li>
+                  
+                      <li>      <a href="../../oak_api/overview.html"  title="Oak API">Oak API</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Features and Plugins <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li class="dropdown-submenu">
+                                      <a href="../../nodestore/overview.html"  title="Node Storage">Node Storage</a>
+              <ul class="dropdown-menu">
+                                  <li>      <a href="../../nodestore/documentmk.html"  title="Document NodeStore">Document NodeStore</a>
+</li>
+                                  <li>      <a href="../../nodestore/segment/overview.html"  title="Segment NodeStore">Segment NodeStore</a>
+</li>
+                              </ul>
+            </li>
+                  
+                      <li>      <a href="../../plugins/blobstore.html"  title="Blob Storage">Blob Storage</a>
+</li>
+                  
+                      <li class="dropdown-submenu">
+                                      <a href="../../query/query.html"  title="Query">Query</a>
+              <ul class="dropdown-menu">
+                                  <li>      <a href="../../query/query-engine.html"  title="Query Engine">Query Engine</a>
+</li>
+                                  <li>      <a href="../../query/indexing.html"  title="Indexing">Indexing</a>
+</li>
+                                  <li>      <a href="../../query/lucene.html"  title="Lucene Index">Lucene Index</a>
+</li>
+                                  <li>      <a href="../../query/property-index.html"  title="Property Index">Property Index</a>
+</li>
+                                  <li>      <a href="../../query/solr.html"  title="Solr Index">Solr Index</a>
+</li>
+                              </ul>
+            </li>
+                  
+                      <li>      <a href="../../security/overview.html"  title="Security">Security</a>
+</li>
+                  
+                      <li>      <a href="../../features/atomic-counter.html"  title="Atomic Counter">Atomic Counter</a>
+</li>
+                  
+                      <li>      <a href="../../features/observation.html"  title="Observation">Observation</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Using Oak <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="../../use_getting_started.html"  title="Getting Started">Getting Started</a>
+</li>
+                  
+                      <li>      <a href="../../construct.html"  title="Repository Construction">Repository Construction</a>
+</li>
+                  
+                      <li>      <a href="../../osgi_config.html"  title="Configuring Oak">Configuring Oak</a>
+</li>
+                  
+                      <li>      <a href="../../command_line.html"  title="Command Line Tools">Command Line Tools</a>
+</li>
+                  
+                      <li>      <a href="../../migration.html"  title="Migration">Migration</a>
+</li>
+                  
+                      <li>      <a href="../../differences.html"  title="Differences to Jackrabbit 2">Differences to Jackrabbit 2</a>
+</li>
+                  
+                      <li>      <a href="../../known_issues.html"  title="Known Issues">Known Issues</a>
+</li>
+                  
+                      <li>      <a href="../../dos_and_donts.html"  title="Dos and Don'ts">Dos and Don'ts</a>
+</li>
+                  
+                      <li>      <a href="../../coldstandby/coldstandby.html"  title="Cold Standby">Cold Standby</a>
+</li>
+                  
+                      <li>      <a href="../../FAQ.html"  title="FAQ">FAQ</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Developing Oak <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="../../dev_getting_started.html"  title="Getting Started">Getting Started</a>
+</li>
+                  
+                      <li>      <a href="../../participating.html"  title="Participating">Participating</a>
+</li>
+                  
+                      <li>      <a href="../../developing-with-git.html"  title="Developing with Git">Developing with Git</a>
+</li>
+                  
+                      <li>      <a href="../../diagnostic-builds.html"  title="Cutting diagnostic builds">Cutting diagnostic builds</a>
+</li>
+                  
+                      <li>      <a href="../../attribution.html"  title="Attribution">Attribution</a>
+</li>
+                  
+                      <li>      <a href="../../release-schedule.html"  title="Release Schedule">Release Schedule</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Links <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="http://jackrabbit.apache.org/oak"  title="Apache Jackrabbit Oak">Apache Jackrabbit Oak</a>
+</li>
+                  
+                      <li>      <a href="http://jackrabbit.apache.org/"  title="Apache Jackrabbit">Apache Jackrabbit</a>
+</li>
+                          </ul>
+      </li>
+                  </ul>
+          
+          
+          
+                   
+                      </div>
+          
+        </div>
+      </div>
+    </div>
+    
+        <div class="container-fluid">
+          <div id="banner">
+        <div class="pull-left">
+                                <div id="bannerLeft">
+                <h2>Oak Documentation</h2>
+                </div>
+                      </div>
+        <div class="pull-right">  </div>
+        <div class="clear"><hr/></div>
+      </div>
+
+      <div id="breadcrumbs">
+        <ul class="breadcrumb">
+                
+                    
+                  <li id="publishDate">Last Published: 2017-03-27</li>
+                  <li class="divider">|</li> <li id="projectVersion">Version: 1.8-SNAPSHOT</li>
+                      
+                
+                    
+      
+                            </ul>
+      </div>
+
+            
+      <div class="row-fluid">
+        <div id="leftColumn" class="span3">
+          <div class="well sidebar-nav">
+                
+                    
+                <ul class="nav nav-list">
+                    <li class="nav-header">Overview</li>
+                                
+      <li>
+    
+                          <a href="../../index.html" title="Jackrabbit Oak">
+          <i class="none"></i>
+        Jackrabbit Oak</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../license.html" title="License">
+          <i class="none"></i>
+        License</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../downloads.html" title="Downloads">
+          <i class="none"></i>
+        Downloads</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../articles.html" title="Articles">
+          <i class="none"></i>
+        Articles</a>
+            </li>
+                              <li class="nav-header">Concepts and Architecture</li>
+                                
+      <li>
+    
+                          <a href="../../architecture/overview.html" title="Overview">
+          <i class="none"></i>
+        Overview</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../architecture/nodestate.html" title="The Node State Model">
+          <i class="none"></i>
+        The Node State Model</a>
+            </li>
+                              <li class="nav-header">Main APIs</li>
+                                
+      <li>
+    
+                          <a href="http://www.day.com/specs/jcr/2.0/index.html" class="externalLink" title="JCR API">
+          <i class="none"></i>
+        JCR API</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../oak_api/overview.html" title="Oak API">
+          <i class="none"></i>
+        Oak API</a>
+            </li>
+                              <li class="nav-header">Features and Plugins</li>
+                                                                                                                                                                                      
+      <li>
+    
+                          <a href="../../nodestore/overview.html" title="Node Storage">
+          <i class="icon-chevron-down"></i>
+        Node Storage</a>
+                    <ul class="nav nav-list">
+                                                                                                                                  
+      <li>
+    
+                          <a href="../../nodestore/documentmk.html" title="Document NodeStore">
+          <i class="icon-chevron-down"></i>
+        Document NodeStore</a>
+                    <ul class="nav nav-list">
+                      
+      <li class="active">
+    
+            <a href="#"><i class="none"></i>Node Bundling</a>
+          </li>
+                      
+      <li>
+    
+                          <a href="../../nodestore/document/secondary-store.html" title="Secondary Store">
+          <i class="none"></i>
+        Secondary Store</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../nodestore/persistent-cache.html" title="Persistent Cache">
+          <i class="none"></i>
+        Persistent Cache</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../clustering.html" title="Clustering">
+          <i class="none"></i>
+        Clustering</a>
+            </li>
+              </ul>
+        </li>
+                      
+      <li>
+    
+                          <a href="../../nodestore/segment/overview.html" title="Segment NodeStore">
+          <i class="none"></i>
+        Segment NodeStore</a>
+            </li>
+              </ul>
+        </li>
+                  
+      <li>
+    
+                          <a href="../../plugins/blobstore.html" title="Blob Storage">
+          <i class="none"></i>
+        Blob Storage</a>
+            </li>
+                                                                                                                                      
+      <li>
+    
+                          <a href="../../query/query.html" title="Query">
+          <i class="icon-chevron-down"></i>
+        Query</a>
+                    <ul class="nav nav-list">
+                      
+      <li>
+    
+                          <a href="../../query/query-engine.html" title="Query Engine">
+          <i class="none"></i>
+        Query Engine</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../query/indexing.html" title="Indexing">
+          <i class="none"></i>
+        Indexing</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../query/lucene.html" title="Lucene Index">
+          <i class="none"></i>
+        Lucene Index</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../query/property-index.html" title="Property Index">
+          <i class="none"></i>
+        Property Index</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../query/solr.html" title="Solr Index">
+          <i class="none"></i>
+        Solr Index</a>
+            </li>
+              </ul>
+        </li>
+                  
+      <li>
+    
+                          <a href="../../security/overview.html" title="Security">
+          <i class="none"></i>
+        Security</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../features/atomic-counter.html" title="Atomic Counter">
+          <i class="none"></i>
+        Atomic Counter</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../features/observation.html" title="Observation">
+          <i class="none"></i>
+        Observation</a>
+            </li>
+                              <li class="nav-header">Using Oak</li>
+                                
+      <li>
+    
+                          <a href="../../use_getting_started.html" title="Getting Started">
+          <i class="none"></i>
+        Getting Started</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../construct.html" title="Repository Construction">
+          <i class="none"></i>
+        Repository Construction</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../osgi_config.html" title="Configuring Oak">
+          <i class="none"></i>
+        Configuring Oak</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../command_line.html" title="Command Line Tools">
+          <i class="none"></i>
+        Command Line Tools</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../migration.html" title="Migration">
+          <i class="none"></i>
+        Migration</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../differences.html" title="Differences to Jackrabbit 2">
+          <i class="none"></i>
+        Differences to Jackrabbit 2</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../known_issues.html" title="Known Issues">
+          <i class="none"></i>
+        Known Issues</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../dos_and_donts.html" title="Dos and Don'ts">
+          <i class="none"></i>
+        Dos and Don'ts</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../coldstandby/coldstandby.html" title="Cold Standby">
+          <i class="none"></i>
+        Cold Standby</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../FAQ.html" title="FAQ">
+          <i class="none"></i>
+        FAQ</a>
+            </li>
+                              <li class="nav-header">Developing Oak</li>
+                                
+      <li>
+    
+                          <a href="../../dev_getting_started.html" title="Getting Started">
+          <i class="none"></i>
+        Getting Started</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../participating.html" title="Participating">
+          <i class="none"></i>
+        Participating</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../developing-with-git.html" title="Developing with Git">
+          <i class="none"></i>
+        Developing with Git</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../diagnostic-builds.html" title="Cutting diagnostic builds">
+          <i class="none"></i>
+        Cutting diagnostic builds</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../attribution.html" title="Attribution">
+          <i class="none"></i>
+        Attribution</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../release-schedule.html" title="Release Schedule">
+          <i class="none"></i>
+        Release Schedule</a>
+            </li>
+                              <li class="nav-header">Links</li>
+                                
+      <li>
+    
+                          <a href="http://jackrabbit.apache.org/oak" class="externalLink" title="Apache Jackrabbit Oak">
+          <i class="none"></i>
+        Apache Jackrabbit Oak</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="http://jackrabbit.apache.org/" class="externalLink" title="Apache Jackrabbit">
+          <i class="none"></i>
+        Apache Jackrabbit</a>
+            </li>
+            </ul>
+                
+                    
+                
+          <hr class="divider" />
+
+           <div id="poweredBy">
+                   
+    <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
+
+    
+    <div class="g-plusone" data-href="http://jackrabbit.apache.org/oak/docs/" data-size="tall" ></div>
+
+                   <div class="clear"></div>
+                            <div class="clear"></div>
+                            <div class="clear"></div>
+                             <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>
+                  </div>
+          </div>
+        </div>
+        
+                
+        <div id="bodyColumn"  class="span9" >
+                                  
+            <!-- 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. --><h1>Bundling Nodes</h1>
+
+<ul>
+  
+<li><a href="#bundling-nodes">Bundling Nodes</a>
+  
+<ul>
+    
+<li><a href="#bundling-usage">Usage</a>
+    
+<ul>
+      
+<li><a href="#bundling-pattern">Bundling Pattern</a></li>
+    </ul></li>
+    
+<li><a href="#bundling-example">Bundling Examples </a>
+    
+<ul>
+      
+<li><a href="#bundling-usage-file">Bundling nt:file </a></li>
+      
+<li><a href="#bundling-usage-file">Bundling app:Asset</a></li>
+    </ul></li>
+    
+<li><a href="#bundling-design-considerations">Design Considerations</a></li>
+    
+<li><a href="#bundling-benefits-limits">Benefits and Limitations</a>
+    
+<ul>
+      
+<li><a href="#bundling-benefits">Benefits</a></li>
+      
+<li><a href="#bundling-limits">Limitations</a></li>
+    </ul></li>
+  </ul></li>
+</ul>
+<p><tt>@since Oak 1.6</tt></p>
+<p>Document NodeStore stores the JCR nodes as Document in underlying <tt>DocumentStore</tt>. So depending on backend that Document is stored in following way</p>
+
+<ul>
+  
+<li>MongoDB - 1 JCR node is mapped to 1 MongoDB Document in <tt>nodes</tt> collection</li>
+  
+<li>RDB - 1 JCR node is mapped to 1 row in <tt>nodes</tt> table</li>
+</ul>
+<p>The remaining part of the document will focus on the <tt>MongoDocumentStore</tt> to explain and illustrate bundling concepts. </p>
+<p>For very fine grained content with many nodes and only few properties per node it is more efficient to bundle multiple nodes into a single MongoDB document. Such bundling mostly benefits reading because there are less round-trips to the backend. At the same time storage footprint is lower because metadata overhead is per document. This is specially important for the various indexes like <tt>_id</tt> and <tt>_modified_1__id_1</tt> as they have less entries indexed.</p>
+<div class="section">
+<h2><a name="bundling-usage"></a> Usage<a name="Usage"></a></h2>
+<p>Bundling is enabled on per nodetype basis. Bundling definitions are defined as content in the repository under <tt>/jcr:system/rep:documentStore/bundlor</tt>.</p>
+
+<div class="source">
+<pre>+ &lt;node type name&gt;
+  - pattern - multi 
+</pre></div>
+<p>For example below content structure enables bundling for nodes of type <tt>nt:file</tt> and <tt>app:Asset</tt></p>
+
+<div class="source">
+<pre>+ jcr:system
+  + documentstore
+    + bundlor
+      + nt:file (oak:Unstructured)
+        - pattern = [&quot;jcr:content&quot;]
+      + app:Asset
+        - pattern = [&quot;jcr:content/metadata&quot;, &quot;jcr:content/renditions&quot;, &quot;jcr:content&quot;]
+</pre></div>
+<p>Once this is done any node of type <tt>nt:file</tt> created <i>after</i> this will be stored in bundled format. Nodes created <i>before</i> the configuration was added are not affected and their underlying documents are not rewritten.</p>
+
+<ul>
+  
+<li><i>Bundling Roots</i> - Nodes having type for which bundling patterns are defined</li>
+  
+<li><i>Bundling Pattern</i> - Pattern defined under bundling config path which governs which all relative nodes are bundled</li>
+  
+<li><i>Micro Tree</i> - Refers to content structure which is bundled. Such content structures are <i>micro</i> tree and multiple  such micro tree form the whole repository tree</li>
+  
+<li><i>Bundling ratio</i> - Ratio of number of JCR nodes bundled as part of bundling root node. For example for nt:file its 2</li>
+</ul>
+<p>Key points to note here</p>
+
+<ol style="list-style-type: decimal">
+  
+<li>Bundling patterns can be defined for either jcr:mixinTypes or jcr:primaryType.</li>
+  
+<li>Bundling pattern defined for mixins take precedence over those defined for primary node type.</li>
+  
+<li>Bundling only impacts content created after the bundling pattern is set.</li>
+  
+<li>Existing content is not modified.</li>
+  
+<li>This feature can be enabled or disabled anytime.</li>
+  
+<li>If bundling is disable later then it only prevents bundling of nodes created after disabling. Existing  bundled nodes remain bundled.</li>
+  
+<li>Bundling pattern is baked in into the created node. So if bundling pattern is changed later, it only affects  new bundled roots created after the change.</li>
+  
+<li>Writes to <tt>/jcr:system/rep:documentStore/bundlor</tt> should be restricted to system admin as this is an important  configuration and any mis configuration here can have severe adverse impact on repository.</li>
+  
+<li>While selecting bundling rule for any node node type inheritance is <i>not</i> considered. Bundling pattern is selected  based on exact match of jcr:mixinTypes or jcr:primaryType names.</li>
+</ol>
+<div class="section">
+<h3><a name="bundling-pattern"></a> Bundling Pattern<a name="Bundling_Pattern"></a></h3>
+<p>Bundling pattern is a multi value value property. The pattern elements are list of relative node paths which should be bundled as part of <i>bundling root</i>. The relative node paths can be of following type:</p>
+
+<ul>
+  
+<li>Static - Like &#x2018;jcr:content&#x2019;, &#x2018;jcr:content/metadata&#x2019;.</li>
+  
+<li>Wildcard <i>(Experimental Feature)</i> - Like &#x2018;jcr:content/renditions/**&#x2019;. This would bundle all nodes under relative paths &#x2018;jcr:content/renditions&#x2019;</li>
+</ul>
+<p><b>Support for wildcard patterns is currently experimental</b></p></div></div>
+<div class="section">
+<h2><a name="bundling-example"></a> Bundling Examples<a name="Bundling_Examples"></a></h2>
+<div class="section">
+<h3><a name="bundling-usage-file"></a> Bundling nt:file<a name="Bundling_nt:file"></a></h3>
+<p>Lets take an example of <tt>nt:file</tt> node like below</p>
+
+<div class="source">
+<pre>+ /content/book.jpg 
+  - jcr:createdBy = &quot;admin&quot;
+  - jcr:primaryType = &quot;nt:file&quot;
+  + jcr:content
+     - jcr:data = &lt;blob id&gt;
+     - jcr:mimeType = &quot;text/plain&quot;
+     - jcr:uuid = &quot;56befaee-f5fe-4252-87f8-0dcc8a624dd5&quot;
+     - jcr:lastModifiedBy = &quot;admin&quot;
+     - jcr:primaryType = &quot;nt:resource&quot;
+</pre></div>
+<p><img src="node-bundling-file.png" alt="Bundling Nodes" /></p>
+<p>This JCR node structure would be stored in MongoDB in 2 documents</p>
+
+<div class="source">
+<pre>{
+       &quot;_id&quot;            : &quot;2:/content/book.jpg&quot;,
+       &quot;jcr:created&quot;      : {&quot;r151ce899ac3-0-1&quot; : &quot;\&quot;dat:2015-12-23T16:41:43.055+05:30\&quot;&quot;},
+       &quot;_modified&quot;        : NumberLong(1450869100),
+       &quot;_deleted&quot;        : { &quot;r151ce899ac3-0-1&quot; : &quot;false&quot;},
+       &quot;jcr:createdBy&quot;  : { &quot;r151ce899ac3-0-1&quot; : &quot;\&quot;admin\&quot;&quot;},
+       &quot;_commitRoot&quot;      : { &quot;r151ce899ac3-0-1&quot; : &quot;0&quot;},
+       &quot;_children&quot;        : true,
+       &quot;jcr:primaryType&quot;: { &quot;r151ce899ac3-0-1&quot; : &quot;\&quot;nam:nt:file\&quot;&quot;},
+       &quot;_modCount&quot;        : NumberLong(1)
+},
+{
+        &quot;_id&quot;               : &quot;3:/content/book.jpg/jcr:content&quot;,
+        &quot;_bin&quot;              : NumberLong(1),
+        &quot;_modified&quot;         : NumberLong(1450869100),
+        &quot;jcr:lastModified&quot;  : { &quot;r151ce899ac3-0-1&quot; : &quot;\&quot;dat:2015-12-23T16:41:43.056+05:30\&quot;&quot;},
+        &quot;_deleted&quot;            : { &quot;r151ce899ac3-0-1&quot; : &quot;false&quot; },
+        &quot;jcr:data&quot;            : { &quot;r151ce899ac3-0-1&quot; : &quot;\&quot;:blobId:xxx\&quot;&quot;},
+        &quot;_commitRoot&quot;         : { &quot;r151ce899ac3-0-1&quot; : &quot;0&quot; },
+        &quot;jcr:mimeType&quot;        : { &quot;r151ce899ac3-0-1&quot; : &quot;\&quot;text/plain\&quot;&quot;},
+        &quot;jcr:uuid&quot;            : { &quot;r151ce899ac3-0-1&quot; : &quot;\&quot;56befaee-f5fe-4252-87f8-0dcc8a624dd5\&quot;&quot;},
+        &quot;jcr:lastModifiedBy&quot;: { &quot;r151ce899ac3-0-1&quot; : &quot;\&quot;admin\&quot;&quot;},
+        &quot;jcr:primaryType&quot;   : { &quot;r151ce899ac3-0-1&quot; : &quot;\&quot;nam:nt:resource\&quot;&quot;},
+        &quot;_modCount&quot;            : NumberLong(1)
+}
+</pre></div>
+<p>Now with bundling pattern like</p>
+
+<div class="source">
+<pre>+ jcr:system
+  + documentstore
+    + bundlor
+      + nt:file (oak:Unstructured)
+        - pattern = [&quot;jcr:content&quot;]
+</pre></div>
+<p>Would bundle the 2 nodes in nt:file node structure in same MongoDB Document</p>
+
+<div class="source">
+<pre>{
+        &quot;_id&quot;                              : &quot;2:/content/book.jpg&quot;,
+        &quot;jcr:primaryType&quot;                 : { &quot;r15866f15753-0-1&quot; : &quot;\&quot;nam:nt:file\&quot;&quot;},
+        &quot;jcr:content/jcr:primaryType&quot;     : { &quot;r15866f15753-0-1&quot; : &quot;\&quot;nam:nt:resource\&quot;&quot;},
+        &quot;_bin&quot;                            : NumberLong(1),
+        &quot;:doc-pattern&quot;                    : { &quot;r15866f15753-0-1&quot; : &quot;[\&quot;str:jcr:content\&quot;]&quot;},
+        &quot;jcr:content/jcr:data&quot;            : { &quot;r15866f15753-0-1&quot; : &quot;\&quot;:blobId:xxx\&quot;&quot;},
+        &quot;_commitRoot&quot;                     : { &quot;r15866f15753-0-1&quot; : &quot;0&quot; },
+        &quot;jcr:content/jcr:uuid&quot;            : { &quot;r15866f15753-0-1&quot; : &quot;\&quot;ee045709-81c5-4164-ba08-c03b9c61b102\&quot;&quot;},
+        &quot;jcr:content/jcr:lastModifiedBy&quot;  : { &quot;r15866f15753-0-1&quot; : &quot;\&quot;admin\&quot;&quot;},
+        &quot;_deleted&quot;                        : { &quot;r15866f15753-0-1&quot; : &quot;false&quot;},
+        &quot;jcr:created&quot;                     : { &quot;r15866f15753-0-1&quot; : &quot;\&quot;dat:2016-11-15T13:14:02.304+05:30\&quot;&quot;},
+        &quot;jcr:content/:doc-self-path&quot;      : {&quot;r15866f15753-0-1&quot; : &quot;\&quot;str:jcr:content\&quot;&quot;},
+        &quot;jcr:createdBy&quot;                   : {&quot;r15866f15753-0-1&quot; : &quot;\&quot;admin\&quot;&quot;},
+        &quot;jcr:content/jcr:lastModified&quot;    : {&quot;r15866f15753-0-1&quot; : &quot;\&quot;dat:2016-11-15T13:14:02.305+05:30\&quot;&quot;},
+        &quot;:doc-has-child-bundled&quot;          : {&quot;r15866f15753-0-1&quot; : &quot;true&quot;},
+        &quot;jcr:content/jcr:mimeType&quot;        : {&quot;r15866f15753-0-1&quot; : &quot;\&quot;text/plain\&quot;&quot;},
+        &quot;_modified&quot;                       : NumberLong(1479195840),
+        &quot;_modCount&quot;                       : NumberLong(1)
+}
+</pre></div>
+<p>So with bundling 1 nt:file would create 1 MongoDB Document. 10M nt:file instance would create 10M MongoDB documents instead of 20M (without bundling)</p></div>
+<div class="section">
+<h3><a name="bundling-usage-file"></a> Bundling app:Asset<a name="Bundling_app:Asset"></a></h3>
+<p>Lets take a more complex content structure. Assume a nodetype <tt>app:Asset</tt> having following content</p>
+
+<div class="source">
+<pre>/content/banner.png
+  - jcr:primaryType = &quot;app:Asset&quot;
+  + jcr:content
+    - jcr:primaryType = &quot;app:AssetContent&quot;
+    + metadata
+      - status = &quot;published&quot;
+      + xmp
+        + 1
+          - softwareAgent = &quot;Adobe Photoshop&quot;
+          - author = &quot;David&quot;
+    + renditions (nt:folder)
+      + original (nt:file)
+        + jcr:content
+          - jcr:data = ...
+    + comments (nt:folder)
+</pre></div>
+<p>Above structure has following characteristics</p>
+
+<ul>
+  
+<li>It consist of <b>static structure</b> like &#x2018;jcr:content&#x2019;, &#x2018;jcr:content/metadata&#x2019;</li>
+  
+<li>It consist of <b>bounded structure</b> like &#x2018;jcr:content/renditions&#x2019;. Under renditions it can have max 5 type of nt:file node</li>
+  
+<li>It has <b>unbounded relative nodes</b> like &#x2018;jcr:content/comments&#x2019; and &#x2018;jcr:content/metadata/xmp&#x2019;. Nodes under these paths  can have unbounded content</li>
+  
+<li>Static and bounded structure take upto ~15 JCR Nodes (assuming 5 types of renditions)</li>
+</ul>
+<p>So 1 asset ~ 15 JCR Nodes and ~ 15 MongoDB documents. Thus by default 10M assets would lead to 150M+ MongoDB Documents. Such a structure can make use of Node Bundling to reduce this storage ratio. </p>
+<p>Lets define a bundling pattern like below</p>
+
+<div class="source">
+<pre>+ jcr:system
+  + documentstore
+    + bundlor
+      + nt:file (oak:Unstructured)
+        - pattern = [&quot;jcr:content&quot;]
+      + app:Asset
+        - pattern = [&quot;jcr:content/metadata&quot;, &quot;jcr:content/renditions/**&quot;, &quot;jcr:content&quot;]
+</pre></div>
+<p>With this bundling pattern same app:Asset structure would be stored in 1 MongoDB Document excluding &#x2018;comments&#x2019; and &#x2018;xmp&#x2019; nodes</p>
+
+<div class="source">
+<pre>{
+
+  &quot;_children&quot;: true,
+  &quot;_modified&quot;: 1469081925,
+  &quot;_id&quot;: &quot;2:/test/book.jpg&quot;,
+  &quot;_commitRoot&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;0&quot;},
+  &quot;_deleted&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;false&quot;},
+  &quot;:doc-pattern&quot;: {
+    &quot;r1560c1b3db8-0-1&quot;: &quot;[\&quot;str:jcr:content/metadata\&quot;,\&quot;str:jcr:content/renditions\&quot;,\&quot;str:jcr:content/renditions/**\&quot;,\&quot;str:jcr:content\&quot;]&quot;
+  },
+  &quot;jcr:primaryType&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;\&quot;str:app:Asset\&quot;&quot;},
+
+  //Relative node jcr:content
+  &quot;jcr:content/:doc-self-path&quot;: {&quot;r1560c1b3db8-0-1&quot; : &quot;\&quot;str:jcr:content\&quot;&quot;},
+  &quot;jcr:content/jcr:primaryType&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;\&quot;nam:oak:Unstructured\&quot;&quot;},
+
+  //Relative node jcr:content/metadata
+  &quot;jcr:content/metadata/:doc-self-path&quot;: {&quot;r1560c1b3db8-0-1&quot; : &quot;\&quot;str:jcr:content/metadata\&quot;&quot;},
+  &quot;jcr:content/metadata/status&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;\&quot;published\&quot;&quot;},
+  &quot;jcr:content/metadata/jcr:primaryType&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;\&quot;nam:oak:Unstructured\&quot;&quot;},
+
+  //Relative node jcr:content/renditions
+  &quot;jcr:content/renditions/:doc-self-path&quot;: {&quot;r1560c1b3db8-0-1&quot; : &quot;\&quot;str:jcr:content/renditions\&quot;&quot;},
+  &quot;jcr:content/renditions/jcr:primaryType&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;\&quot;nam:nt:folder\&quot;&quot;},
+
+  //Relative node jcr:content/renditions/original
+  &quot;jcr:content/renditions/original/:doc-self-path&quot;: {&quot;r1560c1b3db8-0-1&quot; : &quot;\&quot;str:jcr:content/renditions/original\&quot;&quot;},
+  &quot;jcr:content/renditions/original/jcr:primaryType&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;\&quot;nam:nt:file\&quot;&quot;},
+
+  //Relative node jcr:content/renditions/original/jcr:content
+  &quot;jcr:content/renditions/original/jcr:content/:doc-self-path&quot;: {&quot;r1560c1b3db8-0-1&quot; : &quot;\&quot;str:jcr:content/renditions/original/jcr:content\&quot;&quot;},
+  &quot;jcr:content/renditions/original/jcr:content/jcr:primaryType&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;\&quot;nam:nt:resource\&quot;&quot;},
+  &quot;jcr:content/renditions/original/jcr:content/jcr:data&quot;: {&quot;r1560c1b3db8-0-1&quot;: &quot;\&quot;&lt;data&gt;\&quot;&quot;},
+}
+</pre></div></div></div>
+<div class="section">
+<h2><a name="bundling-design-considerations"></a> Design Considerations<a name="Design_Considerations"></a></h2>
+<p>While enabling bundling consider following points:</p>
+<p><b>Enable bundling only for static and bounded relative node paths</b></p>
+<p>As bundled nodes are stored in single MongoDB Document care must be taken such that bundled Document size is within reasonable limits otherwise MongoDB (or RDB) would reject such heavy documents. So bundling pattern should only include those relative node paths which are static or bounded.</p>
+<p>For example in app:Asset it would be wrong to bundle nodes under &#x2018;jcr:content/comments&#x2019; as comments can be unlimited and would bloat up the bundled document. However bundling nodes under &#x2018;jcr:content/renditions&#x2019; should be fine as application logic ensures that at max there would be 4-5 renditions nodes of type nt:file.</p>
+<p>So take into account the content structure while setting up bundling pattern.</p>
+<p><b>Make use of custom mixins to mark unstructured content</b></p>
+<p>If the content structure is mostly made up of nodes of type <tt>nt:unstrcutured</tt> or <tt>oak:Unstructured</tt> try to identify subtree which have consistent structure and define a marker mixin to mark such subtrees. Then bundling pattern can be defined against such mixins.</p>
+<p>For more details on how bundling is implemented refer to <a class="externalLink" href="https://issues.apache.org/jira/browse/OAK-1312">OAK-1312</a></p></div>
+<div class="section">
+<h2><a name="bundling-benefits-limits"></a> Benefits and Limitations<a name="Benefits_and_Limitations"></a></h2>
+<div class="section">
+<h3><a name="bundling-benefits"></a> Benefits<a name="Benefits"></a></h3>
+
+<ul>
+  
+<li>
+<p><b>Reduced latency for traversal</b> - If you have an structure like aap:Asset and traversal is done it would involve lots of queries for child nodes as JCR level traversal is done to read any of the relative nodes like &#x2019;jcr:content/renditions. With bundling all those queries are avoided.</p></li>
+  
+<li>
+<p><b>Reduced number of Documents in persistent store</b> - Currently for a nodetype like app:Asset where 1 app:Asset = 15 JCR Nodes. If we have 10M assets then we would be consuming 150 M documents in MongoDB. With bundling this ratio can be reduced to say 1-5 then it would reduce actual number of documents in Mongo. Fewer documents means reduces size for _id and {_modified, _id} index. Reduced index size allows storing a lot more MongoDB documents as index size is key factor for sizing MongoDB setups.</p></li>
+</ul></div>
+<div class="section">
+<h3><a name="bundling-limits"></a> Limitations<a name="Limitations"></a></h3>
+<p>Currently bundling logic has no fallback in case bundle document size exceeds the size imposed by persistent store. So try to ensure that bundling is limited and does not bundle lots of nodes.</p></div></div>
+                  </div>
+            </div>
+          </div>
+
+    <hr/>
+
+    <footer>
+            <div class="container-fluid">
+              <div class="row span12">Copyright &copy;                    2012-2017
+                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
+            All Rights Reserved.      
+                    
+      </div>
+
+        
+        
+          
+    
+    
+                
+    <div id="ohloh" class="pull-right">
+      <script type="text/javascript" src="http://www.ohloh.net/p/jackrabbit-oak/widgets/project_thin_badge.js"></script>
+    </div>
+        </div>
+    </footer>
+  </body>
+</html>
\ No newline at end of file

Propchange: jackrabbit/site/live/oak/docs/nodestore/document/node-bundling.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: jackrabbit/site/live/oak/docs/nodestore/document/secondary-store-read.png
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/nodestore/document/secondary-store-read.png?rev=1788880&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jackrabbit/site/live/oak/docs/nodestore/document/secondary-store-read.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: jackrabbit/site/live/oak/docs/nodestore/document/secondary-store-write.png
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/nodestore/document/secondary-store-write.png?rev=1788880&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jackrabbit/site/live/oak/docs/nodestore/document/secondary-store-write.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: jackrabbit/site/live/oak/docs/nodestore/document/secondary-store.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/nodestore/document/secondary-store.html?rev=1788880&view=auto
==============================================================================
--- jackrabbit/site/live/oak/docs/nodestore/document/secondary-store.html (added)
+++ jackrabbit/site/live/oak/docs/nodestore/document/secondary-store.html Mon Mar 27 10:24:11 2017
@@ -0,0 +1,765 @@
+<!DOCTYPE html>
+<!--
+ | Generated by Apache Maven Doxia at 2017-03-27
+ | Rendered using Apache Maven Fluido Skin 1.3.0
+-->
+<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="20170327" />
+    <meta http-equiv="Content-Language" content="en" />
+    <title>Jackrabbit Oak - Secondary NodeStore</title>
+    <link rel="stylesheet" href="../../css/apache-maven-fluido-1.3.0.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.3.0.min.js"></script>
+
+    
+            </head>
+        <body class="topBarEnabled">
+          
+    
+    
+            
+    
+    
+    <a href="http://github.com/apache/jackrabbit-oak">
+      <img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
+        src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"
+        alt="Fork me on GitHub">
+    </a>
+  
+                
+                    
+                
+
+    <div id="topbar" class="navbar navbar-fixed-top ">
+      <div class="navbar-inner">
+                <div class="container-fluid">
+        <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>
+                
+                                                                                <a class="brand" href="../../"  title="Oak logo">
+
+                                
+                                                                                                                    <img src="../../oak_logo.png" alt="Oak logo" />
+                
+                </a>
+                    
+                                <ul class="nav">
+                          <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Overview <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="../../index.html"  title="Jackrabbit Oak">Jackrabbit Oak</a>
+</li>
+                  
+                      <li>      <a href="../../license.html"  title="License">License</a>
+</li>
+                  
+                      <li>      <a href="../../downloads.html"  title="Downloads">Downloads</a>
+</li>
+                  
+                      <li>      <a href="../../articles.html"  title="Articles">Articles</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Concepts and Architecture <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="../../architecture/overview.html"  title="Overview">Overview</a>
+</li>
+                  
+                      <li>      <a href="../../architecture/nodestate.html"  title="The Node State Model">The Node State Model</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Main APIs <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="http://www.day.com/specs/jcr/2.0/index.html"  title="JCR API">JCR API</a>
+</li>
+                  
+                      <li>      <a href="../../oak_api/overview.html"  title="Oak API">Oak API</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Features and Plugins <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li class="dropdown-submenu">
+                                      <a href="../../nodestore/overview.html"  title="Node Storage">Node Storage</a>
+              <ul class="dropdown-menu">
+                                  <li>      <a href="../../nodestore/documentmk.html"  title="Document NodeStore">Document NodeStore</a>
+</li>
+                                  <li>      <a href="../../nodestore/segment/overview.html"  title="Segment NodeStore">Segment NodeStore</a>
+</li>
+                              </ul>
+            </li>
+                  
+                      <li>      <a href="../../plugins/blobstore.html"  title="Blob Storage">Blob Storage</a>
+</li>
+                  
+                      <li class="dropdown-submenu">
+                                      <a href="../../query/query.html"  title="Query">Query</a>
+              <ul class="dropdown-menu">
+                                  <li>      <a href="../../query/query-engine.html"  title="Query Engine">Query Engine</a>
+</li>
+                                  <li>      <a href="../../query/indexing.html"  title="Indexing">Indexing</a>
+</li>
+                                  <li>      <a href="../../query/lucene.html"  title="Lucene Index">Lucene Index</a>
+</li>
+                                  <li>      <a href="../../query/property-index.html"  title="Property Index">Property Index</a>
+</li>
+                                  <li>      <a href="../../query/solr.html"  title="Solr Index">Solr Index</a>
+</li>
+                              </ul>
+            </li>
+                  
+                      <li>      <a href="../../security/overview.html"  title="Security">Security</a>
+</li>
+                  
+                      <li>      <a href="../../features/atomic-counter.html"  title="Atomic Counter">Atomic Counter</a>
+</li>
+                  
+                      <li>      <a href="../../features/observation.html"  title="Observation">Observation</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Using Oak <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="../../use_getting_started.html"  title="Getting Started">Getting Started</a>
+</li>
+                  
+                      <li>      <a href="../../construct.html"  title="Repository Construction">Repository Construction</a>
+</li>
+                  
+                      <li>      <a href="../../osgi_config.html"  title="Configuring Oak">Configuring Oak</a>
+</li>
+                  
+                      <li>      <a href="../../command_line.html"  title="Command Line Tools">Command Line Tools</a>
+</li>
+                  
+                      <li>      <a href="../../migration.html"  title="Migration">Migration</a>
+</li>
+                  
+                      <li>      <a href="../../differences.html"  title="Differences to Jackrabbit 2">Differences to Jackrabbit 2</a>
+</li>
+                  
+                      <li>      <a href="../../known_issues.html"  title="Known Issues">Known Issues</a>
+</li>
+                  
+                      <li>      <a href="../../dos_and_donts.html"  title="Dos and Don'ts">Dos and Don'ts</a>
+</li>
+                  
+                      <li>      <a href="../../coldstandby/coldstandby.html"  title="Cold Standby">Cold Standby</a>
+</li>
+                  
+                      <li>      <a href="../../FAQ.html"  title="FAQ">FAQ</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Developing Oak <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="../../dev_getting_started.html"  title="Getting Started">Getting Started</a>
+</li>
+                  
+                      <li>      <a href="../../participating.html"  title="Participating">Participating</a>
+</li>
+                  
+                      <li>      <a href="../../developing-with-git.html"  title="Developing with Git">Developing with Git</a>
+</li>
+                  
+                      <li>      <a href="../../diagnostic-builds.html"  title="Cutting diagnostic builds">Cutting diagnostic builds</a>
+</li>
+                  
+                      <li>      <a href="../../attribution.html"  title="Attribution">Attribution</a>
+</li>
+                  
+                      <li>      <a href="../../release-schedule.html"  title="Release Schedule">Release Schedule</a>
+</li>
+                          </ul>
+      </li>
+                <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Links <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+        
+                      <li>      <a href="http://jackrabbit.apache.org/oak"  title="Apache Jackrabbit Oak">Apache Jackrabbit Oak</a>
+</li>
+                  
+                      <li>      <a href="http://jackrabbit.apache.org/"  title="Apache Jackrabbit">Apache Jackrabbit</a>
+</li>
+                          </ul>
+      </li>
+                  </ul>
+          
+          
+          
+                   
+                      </div>
+          
+        </div>
+      </div>
+    </div>
+    
+        <div class="container-fluid">
+          <div id="banner">
+        <div class="pull-left">
+                                <div id="bannerLeft">
+                <h2>Oak Documentation</h2>
+                </div>
+                      </div>
+        <div class="pull-right">  </div>
+        <div class="clear"><hr/></div>
+      </div>
+
+      <div id="breadcrumbs">
+        <ul class="breadcrumb">
+                
+                    
+                  <li id="publishDate">Last Published: 2017-03-27</li>
+                  <li class="divider">|</li> <li id="projectVersion">Version: 1.8-SNAPSHOT</li>
+                      
+                
+                    
+      
+                            </ul>
+      </div>
+
+            
+      <div class="row-fluid">
+        <div id="leftColumn" class="span3">
+          <div class="well sidebar-nav">
+                
+                    
+                <ul class="nav nav-list">
+                    <li class="nav-header">Overview</li>
+                                
+      <li>
+    
+                          <a href="../../index.html" title="Jackrabbit Oak">
+          <i class="none"></i>
+        Jackrabbit Oak</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../license.html" title="License">
+          <i class="none"></i>
+        License</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../downloads.html" title="Downloads">
+          <i class="none"></i>
+        Downloads</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../articles.html" title="Articles">
+          <i class="none"></i>
+        Articles</a>
+            </li>
+                              <li class="nav-header">Concepts and Architecture</li>
+                                
+      <li>
+    
+                          <a href="../../architecture/overview.html" title="Overview">
+          <i class="none"></i>
+        Overview</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../architecture/nodestate.html" title="The Node State Model">
+          <i class="none"></i>
+        The Node State Model</a>
+            </li>
+                              <li class="nav-header">Main APIs</li>
+                                
+      <li>
+    
+                          <a href="http://www.day.com/specs/jcr/2.0/index.html" class="externalLink" title="JCR API">
+          <i class="none"></i>
+        JCR API</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../oak_api/overview.html" title="Oak API">
+          <i class="none"></i>
+        Oak API</a>
+            </li>
+                              <li class="nav-header">Features and Plugins</li>
+                                                                                                                                                                                      
+      <li>
+    
+                          <a href="../../nodestore/overview.html" title="Node Storage">
+          <i class="icon-chevron-down"></i>
+        Node Storage</a>
+                    <ul class="nav nav-list">
+                                                                                                                                  
+      <li>
+    
+                          <a href="../../nodestore/documentmk.html" title="Document NodeStore">
+          <i class="icon-chevron-down"></i>
+        Document NodeStore</a>
+                    <ul class="nav nav-list">
+                      
+      <li>
+    
+                          <a href="../../nodestore/document/node-bundling.html" title="Node Bundling">
+          <i class="none"></i>
+        Node Bundling</a>
+            </li>
+                      
+      <li class="active">
+    
+            <a href="#"><i class="none"></i>Secondary Store</a>
+          </li>
+                      
+      <li>
+    
+                          <a href="../../nodestore/persistent-cache.html" title="Persistent Cache">
+          <i class="none"></i>
+        Persistent Cache</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../clustering.html" title="Clustering">
+          <i class="none"></i>
+        Clustering</a>
+            </li>
+              </ul>
+        </li>
+                      
+      <li>
+    
+                          <a href="../../nodestore/segment/overview.html" title="Segment NodeStore">
+          <i class="none"></i>
+        Segment NodeStore</a>
+            </li>
+              </ul>
+        </li>
+                  
+      <li>
+    
+                          <a href="../../plugins/blobstore.html" title="Blob Storage">
+          <i class="none"></i>
+        Blob Storage</a>
+            </li>
+                                                                                                                                      
+      <li>
+    
+                          <a href="../../query/query.html" title="Query">
+          <i class="icon-chevron-down"></i>
+        Query</a>
+                    <ul class="nav nav-list">
+                      
+      <li>
+    
+                          <a href="../../query/query-engine.html" title="Query Engine">
+          <i class="none"></i>
+        Query Engine</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../query/indexing.html" title="Indexing">
+          <i class="none"></i>
+        Indexing</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../query/lucene.html" title="Lucene Index">
+          <i class="none"></i>
+        Lucene Index</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../query/property-index.html" title="Property Index">
+          <i class="none"></i>
+        Property Index</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../../query/solr.html" title="Solr Index">
+          <i class="none"></i>
+        Solr Index</a>
+            </li>
+              </ul>
+        </li>
+                  
+      <li>
+    
+                          <a href="../../security/overview.html" title="Security">
+          <i class="none"></i>
+        Security</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../features/atomic-counter.html" title="Atomic Counter">
+          <i class="none"></i>
+        Atomic Counter</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../features/observation.html" title="Observation">
+          <i class="none"></i>
+        Observation</a>
+            </li>
+                              <li class="nav-header">Using Oak</li>
+                                
+      <li>
+    
+                          <a href="../../use_getting_started.html" title="Getting Started">
+          <i class="none"></i>
+        Getting Started</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../construct.html" title="Repository Construction">
+          <i class="none"></i>
+        Repository Construction</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../osgi_config.html" title="Configuring Oak">
+          <i class="none"></i>
+        Configuring Oak</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../command_line.html" title="Command Line Tools">
+          <i class="none"></i>
+        Command Line Tools</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../migration.html" title="Migration">
+          <i class="none"></i>
+        Migration</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../differences.html" title="Differences to Jackrabbit 2">
+          <i class="none"></i>
+        Differences to Jackrabbit 2</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../known_issues.html" title="Known Issues">
+          <i class="none"></i>
+        Known Issues</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../dos_and_donts.html" title="Dos and Don'ts">
+          <i class="none"></i>
+        Dos and Don'ts</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../coldstandby/coldstandby.html" title="Cold Standby">
+          <i class="none"></i>
+        Cold Standby</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../FAQ.html" title="FAQ">
+          <i class="none"></i>
+        FAQ</a>
+            </li>
+                              <li class="nav-header">Developing Oak</li>
+                                
+      <li>
+    
+                          <a href="../../dev_getting_started.html" title="Getting Started">
+          <i class="none"></i>
+        Getting Started</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../participating.html" title="Participating">
+          <i class="none"></i>
+        Participating</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../developing-with-git.html" title="Developing with Git">
+          <i class="none"></i>
+        Developing with Git</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../diagnostic-builds.html" title="Cutting diagnostic builds">
+          <i class="none"></i>
+        Cutting diagnostic builds</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../attribution.html" title="Attribution">
+          <i class="none"></i>
+        Attribution</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="../../release-schedule.html" title="Release Schedule">
+          <i class="none"></i>
+        Release Schedule</a>
+            </li>
+                              <li class="nav-header">Links</li>
+                                
+      <li>
+    
+                          <a href="http://jackrabbit.apache.org/oak" class="externalLink" title="Apache Jackrabbit Oak">
+          <i class="none"></i>
+        Apache Jackrabbit Oak</a>
+            </li>
+                  
+      <li>
+    
+                          <a href="http://jackrabbit.apache.org/" class="externalLink" title="Apache Jackrabbit">
+          <i class="none"></i>
+        Apache Jackrabbit</a>
+            </li>
+            </ul>
+                
+                    
+                
+          <hr class="divider" />
+
+           <div id="poweredBy">
+                   
+    <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
+
+    
+    <div class="g-plusone" data-href="http://jackrabbit.apache.org/oak/docs/" data-size="tall" ></div>
+
+                   <div class="clear"></div>
+                            <div class="clear"></div>
+                            <div class="clear"></div>
+                             <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>
+                  </div>
+          </div>
+        </div>
+        
+                
+        <div id="bodyColumn"  class="span9" >
+                                  
+            <!-- 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. --><h1>Secondary NodeStore</h1>
+
+<ul>
+  
+<li><a href="#secondary-node-store">Secondary NodeStore</a></li>
+  
+<li><a href="#read-flow">Read Flow</a></li>
+  
+<li><a href="#write-flow">Write Flow</a>
+  
+<ul>
+    
+<li><a href="#write-flow-local-changes">Local Changes</a></li>
+    
+<li><a href="#write-flow-external-changes">External Changes</a></li>
+    
+<li><a href="#write-flow-startup-sync">Startup Sync</a></li>
+  </ul></li>
+  
+<li><a href="#usage">Setup </a></li>
+  
+<li><a href="#setup-considerations">Setup Considerations</a></li>
+  
+<li><a href="#administration">Administration</a>
+  
+<ul>
+    
+<li><a href="#secondary-store-maintenance">Maintenance</a></li>
+    
+<li><a href="#secondary-store-cluster">New Cluster Member</a></li>
+  </ul></li>
+</ul>
+<p><tt>@since Oak 1.6</tt> <tt>Experimental Feature</tt></p>
+<p>Compared to SegmentNodeStore DocumentNodeStore has higher latency for reads for the data not present in the cache. This happens due to multiple round trips required to serve a hierarchical read access over remote storage. For e.g. reading content of path <i>/content/assets/nature/sunrise.jpg</i> would require around 4 remote calls if the path content is not present in local cache. <a href="../persistent-cache.html">Persistent Cache</a> helped in improving this by enabling caching lot more content off heap compared to limited inmemory cache. </p>
+<p>With new <a class="externalLink" href="https://issues.apache.org/jira/browse/OAK-1312">Secondary NodeStore</a> support its now possible to configure a SegmentNodeStore as a secondary store to store content under certain set of paths locally. SegmentNodeStore act a local copy of remote repository (secondary store) more like a local git repo which gets updated from primary store (remote Mongo storage) via observation. Writes are still routed to primary store but reads can be served from local secondary store.</p>
+<p><img src="secondary-store.png" alt="Secondary Store Setup" /></p>
+<p>In above setup 2 Oak Cluser nodes connect to same Mongo server. In each Oak instance a SegmentNodeStore is configured as secondary store. This store gets updated by observer.</p>
+<p><b>Experimental Feature</b></p>
+<p>This feature is currently experimental. Following feature item is currently pending</p>
+
+<ul>
+  
+<li><a class="externalLink" href="https://issues.apache.org/jira/browse/OAK-5352">OAK-5352</a> - Support for maintenance task for secondary NodeStore</li>
+</ul>
+<div class="section">
+<h2><a name="read-flow"></a> Read Flow<a name="Read_Flow"></a></h2>
+<p>Reading /a/b at revision r1 would happen like below</p>
+<p><img src="secondary-store-read.png" alt="Secondary Store Read Flow" /> </p>
+<p>Key points here</p>
+
+<ul>
+  
+<li>Secondary NodeStore can be configured to only stored content under certain paths</li>
+  
+<li>Read would be first attempted from any configured secondary NodeStore.
+  
+<ol style="list-style-type: decimal">
+    
+<li>Secondary NodeStore would check if it stores content for that path. Note that it can be configured with path  inclusions</li>
+    
+<li>It then checks whether its root revision is later than revision at which read is being requested</li>
+    
+<li>If NodeState at given path and revision is found then its returned</li>
+  </ol></li>
+  
+<li>If read is not possible from secondary NodeStore then read is done from in memory which may in turn read from remote  Mongo in case of cache miss</li>
+  
+<li>If read is successful from Secondary NodeStore which is based on SegmentNodeStore then further child read from  that path would be directly handled by SegmentNodeStore by passing DocumentNodeStore altogether. So if /a/b@r1 is  found in secondary then read for /a/b/c@r1 would be directly handled by secondary store</li>
+</ul>
+<p>Note that even if root revision of secondary store is lagging behind current head its possible that read for /a/b can be handled by secondary store if /a has not been modified recently. So those parts of repo which have not been recently modified would most likely be served from Secondary NodeStore and avoid remote calls to Mongo.</p></div>
+<div class="section">
+<h2><a name="write-flow"></a> Write Flow<a name="Write_Flow"></a></h2>
+<p>Updates to secondary store happen in 3 ways</p>
+<p><img src="secondary-store-write.png" alt="Secondary Store Write Flow" /> </p>
+<p>Key points here</p>
+
+<ul>
+  
+<li>Writes done by NodeStore caller i.e. JCR layer are always done on primary store i.e. Mongo</li>
+  
+<li>Secondary NodeStore is updated via Oak Observation support and NodeState diff</li>
+  
+<li>Secondary NodeStore can be configured with path filter and then it would only be interested in  changes for configured paths</li>
+</ul>
+<div class="section">
+<h3><a name="write-flow-local-changes"></a> Local Changes<a name="Local_Changes"></a></h3>
+<p>For local changes done on that cluster nodes the writes are applied as part of Observation call where DocumentNodeStore send content change callback to all registered observers. Here Secondary NodeStore registers itself as an Observer and listed for such callback.</p>
+<p>So upon any local change it gets a callback with latest state of root paths. There it performs a diff between local head revision and new head revision and applies the changes onto local store</p></div>
+<div class="section">
+<h3><a name="write-flow-external-changes"></a> External Changes<a name="External_Changes"></a></h3>
+<p>DocumentNodeStore periodically performs <a href="../documentmk.html#bg-read">background reads</a> to pickup changes from other cluster node. Such a change is then pushed to registered observer as an external change. Secondary NodeStore uses same flow as for local changes to update its state.</p>
+<p>This diff based update mechanism would then only read content from remote for the changed paths and further only for paths in which secondary NodeStore is interested</p></div>
+<div class="section">
+<h3><a name="write-flow-startup-sync"></a> Startup Sync<a name="Startup_Sync"></a></h3>
+<p>If the cluster node is shutdown and later started then at time of start the secondary NodeStore would try to synchronize its state with remote storage again by performing diff between local head revision and remote head revision. This is done asynchronously and does not block the startup</p></div></div>
+<div class="section">
+<h2><a name="usage"></a> Setup<a name="Setup"></a></h2>
+<p>For enabling this feature following OSGi configurations have to be done</p>
+<p><b>1. Configure SegmentNodeStore in secondary role</b></p>
+<p>Create an OSGi config file <tt>org.apache.jackrabbit.oak.segment.SegmentNodeStoreFactory-secondary.config</tt> with following content</p>
+
+<div class="source">
+<pre>role=&quot;secondary&quot;
+</pre></div>
+<p>This would create a SegmentNodeStore in secondary role and uses default <tt>segmentstore-secondary</tt> directory to store the segment files. Refer to <a href="../../osgi_config.html#config-SegmentNodeStoreService">config options</a> for more details. Note all the options for <tt>SegmentNodeStoreService</tt> are applicable for <tt>SegmentNodeStoreFactory</tt></p>
+<p><b>2. Configure SecondaryStoreCacheService (optional)</b></p>
+<p>By default secondary NodeStore would be activated based on previous config only. However it can be tweaked further by creating an OSGi config file <tt>org.apache.jackrabbit.oak.plugins.document.secondary.SecondaryStoreCacheService.config</tt></p>
+
+<div class="source">
+<pre>includedPaths=[ \
+  &quot;/libs&quot;, \
+  &quot;/apps&quot;, \
+  &quot;/content&quot;
+  ]
+</pre></div>
+<p>Above config would enable secondary NodeStore for paths &#x2018;/libs, /apps and /content&#x2019;</p></div>
+<div class="section">
+<h2><a name="setup-considerations"></a> Setup Considerations<a name="Setup_Considerations"></a></h2>
+<p>While enabling secondary NodeStore feature following aspects needs to be considered</p>
+
+<ul>
+  
+<li>SegmentNodeStore used as secondary NodeStore would compete with system resource like memory along with  in memory caches of DocumentNodeStore and Lucene index files. So system must have sufficient memory to  for all these 3 components</li>
+  
+<li>SegmentNodeStore can be copied from any existing cluster node to a new node.</li>
+  
+<li>If this is being enabled for existing setup then initial sync would take some time. So take that into account  while planning to enable this feature</li>
+  
+<li>For best performance include those paths of the repository which are accessed by end user. Specially those  content paths where read to write ratio is high.</li>
+</ul></div>
+<div class="section">
+<h2><a name="administration"></a> Administration<a name="Administration"></a></h2>
+<div class="section">
+<h3><a name="secondary-store-maintenance"></a> Maintenance<a name="Maintenance"></a></h3>
+<p>Certain maintenance like <a href="../segment/overview.html#garbage-collection">online RevisionGC</a> for secondary NodeStore i.e. SegmentNodeStore need to be enabled. (This feature is currently pending <a class="externalLink" href="https://issues.apache.org/jira/browse/OAK-5352">OAK-5352</a>).</p>
+<p>This would ensure that older revision gets garbage collected</p></div>
+<div class="section">
+<h3><a name="secondary-store-cluster"></a> New Cluster Member<a name="New_Cluster_Member"></a></h3>
+<p>If a new Oak server is joined to cluster then it should be done by cloning the secondary NodeStore from some existing cluster member otherwise the initial sync would take a long time to complete</p></div></div>
+                  </div>
+            </div>
+          </div>
+
+    <hr/>
+
+    <footer>
+            <div class="container-fluid">
+              <div class="row span12">Copyright &copy;                    2012-2017
+                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
+            All Rights Reserved.      
+                    
+      </div>
+
+        
+        
+          
+    
+    
+                
+    <div id="ohloh" class="pull-right">
+      <script type="text/javascript" src="http://www.ohloh.net/p/jackrabbit-oak/widgets/project_thin_badge.js"></script>
+    </div>
+        </div>
+    </footer>
+  </body>
+</html>
\ No newline at end of file

Propchange: jackrabbit/site/live/oak/docs/nodestore/document/secondary-store.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: jackrabbit/site/live/oak/docs/nodestore/document/secondary-store.png
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/nodestore/document/secondary-store.png?rev=1788880&view=auto
==============================================================================
Binary file - no diff available.

Propchange: jackrabbit/site/live/oak/docs/nodestore/document/secondary-store.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Modified: jackrabbit/site/live/oak/docs/nodestore/documentmk.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/nodestore/documentmk.html?rev=1788880&r1=1788879&r2=1788880&view=diff
==============================================================================
--- jackrabbit/site/live/oak/docs/nodestore/documentmk.html (original)
+++ jackrabbit/site/live/oak/docs/nodestore/documentmk.html Mon Mar 27 10:24:11 2017
@@ -1,15 +1,15 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia at 2017-03-21
+ | Generated by Apache Maven Doxia at 2017-03-27
  | Rendered using Apache Maven Fluido Skin 1.3.0
 -->
 <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="20170321" />
+    <meta name="Date-Revision-yyyymmdd" content="20170327" />
     <meta http-equiv="Content-Language" content="en" />
-    <title>Jackrabbit Oak - <a name="oak-document-storage"></a> Oak Document Storage</title>
+    <title>Jackrabbit Oak - Oak Document Storage</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-1.3.0.min.css" />
     <link rel="stylesheet" href="../css/site.css" />
     <link rel="stylesheet" href="../css/print.css" media="print" />
@@ -65,6 +65,9 @@
                   
                       <li>      <a href="../downloads.html"  title="Downloads">Downloads</a>
 </li>
+                  
+                      <li>      <a href="../articles.html"  title="Articles">Articles</a>
+</li>
                           </ul>
       </li>
                 <li class="dropdown">
@@ -127,6 +130,9 @@
                   
                       <li>      <a href="../features/atomic-counter.html"  title="Atomic Counter">Atomic Counter</a>
 </li>
+                  
+                      <li>      <a href="../features/observation.html"  title="Observation">Observation</a>
+</li>
                           </ul>
       </li>
                 <li class="dropdown">
@@ -224,7 +230,7 @@
         <ul class="breadcrumb">
                 
                     
-                  <li id="publishDate">Last Published: 2017-03-21</li>
+                  <li id="publishDate">Last Published: 2017-03-27</li>
                   <li class="divider">|</li> <li id="projectVersion">Version: 1.8-SNAPSHOT</li>
                       
                 
@@ -262,6 +268,13 @@
           <i class="none"></i>
         Downloads</a>
             </li>
+                  
+      <li>
+    
+                          <a href="../articles.html" title="Articles">
+          <i class="none"></i>
+        Articles</a>
+            </li>
                               <li class="nav-header">Concepts and Architecture</li>
                                 
       <li>
@@ -293,14 +306,14 @@
         Oak API</a>
             </li>
                               <li class="nav-header">Features and Plugins</li>
-                                                                                                                                                  
+                                                                                                                                                                                      
       <li>
     
                           <a href="../nodestore/overview.html" title="Node Storage">
           <i class="icon-chevron-down"></i>
         Node Storage</a>
                     <ul class="nav nav-list">
-                                                                                        
+                                                                                                                            
       <li class="active">
     
             <a href="#"><i class="icon-chevron-down"></i>Document NodeStore</a>
@@ -308,6 +321,20 @@
                       
       <li>
     
+                          <a href="../nodestore/document/node-bundling.html" title="Node Bundling">
+          <i class="none"></i>
+        Node Bundling</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../nodestore/document/secondary-store.html" title="Secondary Store">
+          <i class="none"></i>
+        Secondary Store</a>
+            </li>
+                      
+      <li>
+    
                           <a href="../nodestore/persistent-cache.html" title="Persistent Cache">
           <i class="none"></i>
         Persistent Cache</a>
@@ -395,6 +422,13 @@
           <i class="none"></i>
         Atomic Counter</a>
             </li>
+                  
+      <li>
+    
+                          <a href="../features/observation.html" title="Observation">
+          <i class="none"></i>
+        Observation</a>
+            </li>
                               <li class="nav-header">Using Oak</li>
                                 
       <li>
@@ -563,7 +597,7 @@
    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. --><h1><a name="oak-document-storage"></a> Oak Document Storage</h1>
+   limitations under the License. --><h1>Oak Document Storage</h1>
 
 <ul>
   
@@ -571,6 +605,8 @@
   
 <ul>
     
+<li><a href="#new-1.6">New in 1.6</a></li>
+    
 <li><a href="#backend-implementations">Backend implementations</a></li>
     
 <li><a href="#content-model">Content Model</a></li>
@@ -585,6 +621,8 @@
     
 <li><a href="#previous-documents">Previous Documents</a></li>
     
+<li><a href="#node-bundling">Node Bundling</a></li>
+    
 <li><a href="#background-operations">Background Operations</a>
     
 <ul>
@@ -634,6 +672,15 @@
 <p>One of the plugins in Oak stores data in a document oriented format. The plugin implements the low level <tt>NodeStore</tt> interface.</p>
 <p>The document storage optionally uses the <a href="persistent-cache.html">persistent cache</a> to reduce read operations on the backend storage.</p>
 <div class="section">
+<h2><a name="new-1.6"></a> New in 1.6<a name="New_in_1.6"></a></h2>
+
+<ul>
+  
+<li><a href="#node-bundling">Node Bundling</a></li>
+  
+<li><a href="#secondary-store">Secondary Store</a></li>
+</ul></div>
+<div class="section">
 <h2><a name="backend-implementations"></a> Backend implementations<a name="Backend_implementations"></a></h2>
 <p>DocumentMK supports a number of backends, with a storage abstraction called <tt>DocumentStore</tt>:</p>
 
@@ -877,6 +924,10 @@ nodes
 </pre></div>
 <p>Previous documents only contain immutable data, which means it only contains committed and merged <tt>_revisions</tt>. This also means the previous ranges of committed data may overlap because branch commits are not moved to previous documents until the branch is merged.</p></div>
 <div class="section">
+<h2><a name="node-bundling"></a> node-bundling</h2>
+<p><tt>@since Oak 1.6</tt></p>
+<p>Refer to <a href="document/node-bundling.html">Node Bundling</a></p></div>
+<div class="section">
 <h2><a name="background-operations"></a> Background Operations<a name="Background_Operations"></a></h2>
 <p>Each DocumentMK instance connecting to same database in Mongo server performs certain background task.</p>
 <div class="section">
@@ -1005,6 +1056,10 @@ nodes
 <pre>&gt; java -jar oak-run-1.8.0.jar unlockUpgrade mongodb://example.com:27017/oak
 </pre></div>
 <p>Please note that unlocking an upgrade is only possible when all cluster nodes are inactive, otherwise the command will refuse to change the format version.</p></div>
+<div class="section">
+<h2><a name="secondary-store"></a> Secondary Store<a name="Secondary_Store"></a></h2>
+<p><tt>@since Oak 1.6</tt></p>
+<p>Refer to <a href="document/secondary-store.html">Secondary Store</a></p></div>
                   </div>
             </div>
           </div>

Modified: jackrabbit/site/live/oak/docs/nodestore/overview.html
URL: http://svn.apache.org/viewvc/jackrabbit/site/live/oak/docs/nodestore/overview.html?rev=1788880&r1=1788879&r2=1788880&view=diff
==============================================================================
--- jackrabbit/site/live/oak/docs/nodestore/overview.html (original)
+++ jackrabbit/site/live/oak/docs/nodestore/overview.html Mon Mar 27 10:24:11 2017
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia at 2017-03-21
+ | Generated by Apache Maven Doxia at 2017-03-27
  | Rendered using Apache Maven Fluido Skin 1.3.0
 -->
 <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="20170321" />
+    <meta name="Date-Revision-yyyymmdd" content="20170327" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Jackrabbit Oak - Node Storage</title>
     <link rel="stylesheet" href="../css/apache-maven-fluido-1.3.0.min.css" />
@@ -65,6 +65,9 @@
                   
                       <li>      <a href="../downloads.html"  title="Downloads">Downloads</a>
 </li>
+                  
+                      <li>      <a href="../articles.html"  title="Articles">Articles</a>
+</li>
                           </ul>
       </li>
                 <li class="dropdown">
@@ -127,6 +130,9 @@
                   
                       <li>      <a href="../features/atomic-counter.html"  title="Atomic Counter">Atomic Counter</a>
 </li>
+                  
+                      <li>      <a href="../features/observation.html"  title="Observation">Observation</a>
+</li>
                           </ul>
       </li>
                 <li class="dropdown">
@@ -224,7 +230,7 @@
         <ul class="breadcrumb">
                 
                     
-                  <li id="publishDate">Last Published: 2017-03-21</li>
+                  <li id="publishDate">Last Published: 2017-03-27</li>
                   <li class="divider">|</li> <li id="projectVersion">Version: 1.8-SNAPSHOT</li>
                       
                 
@@ -262,6 +268,13 @@
           <i class="none"></i>
         Downloads</a>
             </li>
+                  
+      <li>
+    
+                          <a href="../articles.html" title="Articles">
+          <i class="none"></i>
+        Articles</a>
+            </li>
                               <li class="nav-header">Concepts and Architecture</li>
                                 
       <li>
@@ -293,12 +306,12 @@
         Oak API</a>
             </li>
                               <li class="nav-header">Features and Plugins</li>
-                                                                                                                                            
+                                                                                                                                                                                
       <li class="active">
     
             <a href="#"><i class="icon-chevron-down"></i>Node Storage</a>
                   <ul class="nav nav-list">
-                                                                                    
+                                                                                                                        
       <li>
     
                           <a href="../nodestore/documentmk.html" title="Document NodeStore">
@@ -308,6 +321,20 @@
                       
       <li>
     
+                          <a href="../nodestore/document/node-bundling.html" title="Node Bundling">
+          <i class="none"></i>
+        Node Bundling</a>
+            </li>
+                      
+      <li>
+    
+                          <a href="../nodestore/document/secondary-store.html" title="Secondary Store">
+          <i class="none"></i>
+        Secondary Store</a>
+            </li>
+                      
+      <li>
+    
                           <a href="../nodestore/persistent-cache.html" title="Persistent Cache">
           <i class="none"></i>
         Persistent Cache</a>
@@ -395,6 +422,13 @@
           <i class="none"></i>
         Atomic Counter</a>
             </li>
+                  
+      <li>
+    
+                          <a href="../features/observation.html" title="Observation">
+          <i class="none"></i>
+        Observation</a>
+            </li>
                               <li class="nav-header">Using Oak</li>
                                 
       <li>