directory-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject svn commit: r873501 - in /websites/staging/directory/trunk/content: ./ mavibot/vision.html
Date Thu, 08 Aug 2013 13:58:52 GMT
Author: buildbot
Date: Thu Aug  8 13:58:51 2013
New Revision: 873501

Staging update by buildbot for directory

    websites/staging/directory/trunk/content/   (props changed)

Propchange: websites/staging/directory/trunk/content/
--- cms:source-revision (original)
+++ cms:source-revision Thu Aug  8 13:58:51 2013
@@ -1 +1 @@

Added: websites/staging/directory/trunk/content/mavibot/vision.html
--- websites/staging/directory/trunk/content/mavibot/vision.html (added)
+++ websites/staging/directory/trunk/content/mavibot/vision.html Thu Aug  8 13:58:51 2013
@@ -0,0 +1,165 @@
+<!DOCTYPE html>
+    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
+    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.
+	<head>
+		<title>Vision &mdash; Apache Directory</title>
+	    <link href="./../css/common.css" rel="stylesheet" type="text/css">
+	    <link href="./../css/turquoise.css" rel="stylesheet" type="text/css">
+        <link rel="shortcut icon" href="./../images/mavibot-icon_16x16.png">
+        <!-- Google Analytics -->
+        <script src="" type="text/javascript"></script>
+        <script type="text/javascript">
+            _uacct = "UA-1358462-1";
+            urchinTracker();
+        </script>
+	</head>
+	<body>
+	    <div id="container">
+            <div id="header">
+                <div id="subProjectsNavBar">
+                    <a href="./../">
+                        Apache Directory Project
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../apacheds">
+                        ApacheDS
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../studio">
+                        Apache Directory Studio
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../api">
+                        Apache LDAP API
+                    </a>
+                    &nbsp;|&nbsp;
+                    <a href="./../mavibot">
+                        <STRONG>Mavibot</STRONG>
+                    </a>
+                </div><!-- subProjectsNavBar -->
+            </div><!-- header -->
+            <div id="content">
+                <div id="leftColumn">
+<div id="navigation">
+    <h5>Downloads</h5>
+    <ul>
+	    <li><a href="./../mavibot/downloads.html">Version 1.0.0-M1</a>&nbsp;&nbsp;<IMG
src="./../images/new_badge.gif" alt="" style="margin-bottom:-3px;" border="0"></li>
+        <li><a href="./../mavibot/download-old-versions.html">Older versions</a></li>
+    </ul>
+    <h5>Getting Started</h5>
+    <ul>
+        <li><a href="./../mavibot/vision.html">Vision</a></li>
+    </ul>
+    <h5>Documentation</h5>
+    <ul>
+        <li><a href="./../mavibot/five-minutes-tutorial.html">Five minutes tutorial</a></li>
+	<li><a href="./../mavibot/user-guide.html">User Guide</a></li>
+        <li><a href="./../mavibot/gen-docs/latest/apidocs/">JavaDocs</a></li>
+        <!--li><a href="./../mavibot/gen-docs/latest/">Generated Reports</a></li-->
+        <li><a href="./../mavibot/developer-guide.html">Developer Guide</a></li>
+    </ul>
+    <h5>Support</h5>
+    <ul>
+        <li><a href="./../mailing-lists-and-irc.html">Mailing Lists &amp;
+        <li><a href="./../sources.html">Sources</a></li>
+        <li><a href="./../issue-tracking.html">Issue Tracking</a></li>
+        <li><a href="./../commercial-support.html">Commercial Support</a></li>
+    </ul>
+    <h5>Community</h5>
+    <ul>
+        <li><a href="./../contribute.html">How to Contribute</a></li>
+        <li><a href="./../team.html">Team</a></li>
+        <li><a href="./../original-project-proposal.html">Original Project Proposal</a></li>
+        <li><a href="./../special-thanks.html" class="external-link" rel="nofollow">Special
+    </ul>
+    <h5>About Apache</h5>
+    <ul>
+        <li><a href="">Apache</a></li>
+        <li><a href="">License</a></li>
+        <li><a href="">Sponsorship</a></li>
+        <li><a href="">Thanks</a></li>
+        <li><a href="">Security</a></li>
+    </ul>
+    <a href="" target="_blank" rel="nofollow"><img src="./../images/banner-ldapcon-2013.png"
alt="LDAPCon 2013" width="167" height="231"></a>
+</div><!-- navigation -->
+                </div><!-- leftColumn -->
+                <div id="rightColumn">
+<h1 id="vision">Vision</h1>
+<p>The <strong>Apache Directory Server</strong> is using an old package
to manage its data : <strong>JDBM</strong>. This is a simple - but functional
- BTree implementation in Java. It support transactions and storage on disk.</p>
+<p>So far, so good. Except that it's kind of slow, and more important, it does not
support concurrent reads and writes.</p>
+<p>At some point, we decided to go for another implementation, but for a MVCC BTree.</p>
+<h2 id="what-is-a-mvcc-btree">What is a MVCC BTree ?</h2>
+<h3 id="btree-basics">Btree basics</h3>
+<p>A <strong>Btree</strong> is a data structure that stores <Key, Value>
tuples in a tree, with the guarantee that the tree will be ordered, and that the depth of
the tree is the same for all the leaves. A <strong>Btree</strong> has nodes and
leaves (with the only exception of a Btree with only a root page). The nodes are used to route
to the underlying values, and have children. Leaves don't have children.</p>
+<p>Nodes and leaves have a maximum number of elements stored into them, and when they
are full, they are split. If the split is done on a leaf, we may have to reorganize the tree
so that either we can move some elements up and keep the tree at the current height, or we
may have to reorganize the full tree so that all the leaves are at the same level, which will
then be one deeper (if we added some value) than the tree before the split.</p>
+<h3 id="btree-vs-btree">Btree vs B+Tree</h3>
+<p>The difference between those two data structures is that Btree store values in the
nodes, when B+Tree do store all the values in leaves.</p>
+<p>At first glance, we can say that finding a value in a Btree will be faster, as we
may not go down to the leaves to find it. OTOH, a B+Tree has many advantages, but the two
major advantages are :</p>
+<li>we don't need to go up in the tree to browse the tree when searching for more than
one value, we can just read the leaves, as they are chained.</li>
+<li>we will have smaller nodes, so we can cache more of the tree pages than if we have
values in the nodes.</li>
+<p>Those two big advantages make the B+Tree more interesting to use than the simpler
+<p>(See <a href="">Wikipedia page on B+tree</a>
and <a href="">Wikipedia page on Btree</a></p>
+<h3 id="mvcc">MVCC</h3>
+<p><strong>MVCC</strong> (Multi Version Concurrency Control) is a way to
provide concurrent access to the Btree (it's extensively used in many other areas, like programming
languages and transactional memory). The main idea is to create a new version of the tree
each time we do a modification. It also allows the reorganization of the data on the fly,
but this is an extra benefit.</p>
+<p>The way it works is that when you do a search on the tree, you first acquire the
current revision. Even if the search is taking a while, because it fetches many values, the
tree will remain unchanged for the selected revision</p>
+<p>Any modification done on the tree will first create a new revision, and the modified
pages will first be copied, so that the previous versions will still be available for any
search operation being executed at the same time.</p>
+<p>It has three direct consequences :</p>
+<li>first, a search will always return 'outdated' values, in the way that new data
won't be returned, as they will be stored in a version which is newer.</li>
+<li>Second, and more important, we don't need any lock to access the data when doing
a search, as there is no possible modification on a versioned tree.</li>
+<li>Third, concurrent modifications are thus limited, as we want to be sure that we
don't override some modification done by another thread. They are ways to mitigate this constraints,
but in most of the case, it's acceptable.</li>
+<h1 id="so-what-do-we-have-with-mavibot">So what do we have with Mavibot ?</h1>
+<p>Pretty much the same thing than <strong>JDBM</strong> but faster, with
concurrent reads and writes, serialized writes, transactions, bulk loads (a missing features
in <strong>JDBM</strong>), multi-version support, and in-memory BTree.</p>
+                </div><!-- rightColumn -->
+                <div id="endContent"></div>
+            </div><!-- content -->
+            <div id="footer">&copy; 2003-2012, <a href="">The
Apache Software Foundation</a> - <a href="./../privacy-policy.html">Privacy Policy</a><br
+                Apache Directory, ApacheDS, Apache Directory Server, Apache Directory Studio,
Apache LDAP API, Apache Triplesec, Triplesec, Apache Mavibot, Mavibot, Apache, the Apache
feather logo, and the Apache Directory project logos are trademarks of The Apache Software
+            </div>
+        </div><!-- container -->
+    </body>

View raw message