Oak Architecture at a high level comprises of Oak Repository which can be accessed by Oak API (implementation of JCR API) or MicroKernel API. MicroKernel API (uses JSOP format) is better suited for remote access to the content storage. The Oak API (referred as NodeStore API as well) can ONLY be accessed from within the same JVM.
Oak Repository has two main storage approaches. Either a “DocumentStore” (mongodb or RDBMS) or “SegmentStore” (TAR files on local file system). The design principles and data model for both storage approaches are same. For example, manage huge trees of nodes and properties, Simple JSON data model i.e. just nodes and properties. One important thing to remember about “DocumentStore” is each JCR content node is stored as a separate document.
Note: The location where binary data is stored is referred to as the Data Store, while the location of the content nodes is called the Node Store. Oak provides the option to store binary data (Data Store) separately from content nodes like TAR, Mongo DB, RDBMS, S3 and File System.
Multiversion Concurrency Control
In the past (Jackrabbit 2), session always reflects the latest state of repository, however with Oak session is a view of the repository at the time session was created. There are advantages and disadvantages to this but in-general there is a huge performance improvement. It is always recommended to use short sessions as other sessions might update the same node that is in use by current session.