jackrabbit-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Jackrabbit Wiki] Update of "RepositoryMicroKernel" by stefan
Date Tue, 20 Mar 2012 15:14:05 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Jackrabbit Wiki" for change notification.

The "RepositoryMicroKernel" page has been changed by stefan:

cleanup wiki page, remove references to sandbox project

  == Repository MicroKernel API ==
  December 2010 I started drafting an API representing the core MVCC-based persistence engine
of a next-gen Jackrabbit version:
- [[http://svn.apache.org/repos/asf/jackrabbit/sandbox/microkernel/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java|MicroKernel.java]]
+ [[http://svn.apache.org/repos/asf/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/api/MicroKernel.java|MicroKernel.java]]
  === API Design Goals ===
   * stateless
@@ -14, +14 @@

   * highly scalable concurrent read & write operations
   * easily portable to other programming languages
   * efficient support for large number of sibling child nodes
-  * integrated API for storing/retrieving large binaries (similar to DataStore API)
+  * integrated API for storing/retrieving large binaries
   * human-readable data serialization (e.g. JSON, YAML)
  === Data Model ===
@@ -24, +24 @@

     can only refer to a property or a child node, not both at the same time.
   * properties are represented as name/value pairs
   * supported property types: string, number
-  * other property types (weak/hard reference, date, etc) would need to be encoded/mangled
in name or value
-  * no support for JCR/XML-like namespaces, "foo:bar" is just an ordinary name
- === Prototype (work in progress...!) ===
+ === Implementation (work in progress...!) ===
- To test the feasibility i wrote a first primitive prototype implementation of the MicroKernel
   * GIT/SVN-inspired revision model
   * writes don't interfere with readers
   * single and very narrow point of synchronization on commit: concurrent commits are persisted
in parallel and only synchronized while the symbolic HEAD reference is rewritten; interfering
commits are merged top-down using a 3-way merge algorithm, i.e. large concurrent commits at
different paths should be processed in parallel with only minimal synchronization overhead.
   * DAG-based content-addressable loose object store (DAG: Directed Acyclic Graph)
-  * uses embedded H2 database engine for persistence
- === Open Issues ===
-  * JCR-style access by identifier/mix:referenceable support will require a separate index
maintained by the MicroKernel. The implementation will be non-trivial, given the nature of
the underlying DAG-based revision model.
-  * the size of the loose object store is expected to grow significantly and rapidly (mainly
due to the MVCC approach); furthermore, the chosen optimization strategy for concurrent writes
(write first and merge later on if necessary) may leave garbage, i.e. dangling objects not
connected to any revisions. there clearly needs to be some independant gc and packing/compacting
mechanism (e.g. aggregating multiple revisions in a single file/object).
- === Architecture (overview) ===
-  * JCR (full TCK-compliant implementation)
-  * SPI (node types, workspaces, namespaces, access control, search, locking, ...)
-  * MicroKernel
  === Source Code ===
- [http://svn.apache.org/repos/asf/jackrabbit/sandbox/microkernel/]
+ [http://svn.apache.org/repos/asf/jackrabbit/oak/trunk/oak-mk/]

View raw message