Apache Sling provides resource-based access to NoSQL document stores like MongoDB and Couchbase via its Resource API using the NoSQL resource providers. This is possible in combination with a JCR-based repository (e.g. only on a special path in the resource tree), or a only persistence for the whole resource tree depending on the resource provider configuration.
The general concept of retrieving from and storing resource data in NoSQL document stores is the same independently from the NoSQL product used:
All these general features are implemented in an abstraction layer called "Apache Sling NoSQL Generic Resource Provider", which is used by the resource provider implementations per NoSQL product. Those implementation than only implement a thin "adapter" which maps the resource data to the NoSQL product-specific storage formats and query capabilities, without having to care about all the complex resource provider handling.
This generic resource provider also contains a set of integration tests covering the most relevant resource read- and write usecases which can be used to test a NoSQL product-specific resource provider implementation and the underlying NoSQL database.
Resource provider for MongoDB NoSQL database.
Tested with MongoDB Server 3.0.6 and MongoDB Java Driver 3.1.1.
Configuration example:
org.apache.sling.nosql.mongodb.resourceprovider.MongoDBNoSqlResourceProviderFactory.factory.config-default
provider.roots=["/"]
connectionString="localhost:27017"
database="sling"
collection="resources"
See Apache Felix OSGi console for detailed documentation of the parameters. All resource data is stored in one Collection of one MongoDB database. Each resource is stored as a document with the path stored in an "_id" property.
Source code: Apache Sling NoSQL MongoDB Resource Provider
Please note: there is an alternative MongoDB resource provider implementation from 2012 which has less features, a slightly different concept for storing resource data (in multiple collections), and it does not use the "Generic Resource Provider".
Resource provider for Couchbase NoSQL database.
Tested with Couchbase Server 4.0.0 and Couchbase Java SDK 2.2.4. Please note: Couchbase 4 or higher is mandatory because N1QL support is required.
Configuration example:
org.apache.sling.nosql.couchbase.resourceprovider.CouchbaseNoSqlResourceProviderFactory.factory.config-default
provider.roots=["/"]
org.apache.sling.nosql.couchbase.client.CouchbaseClient.factory.config-default
clientId="sling-resourceprovider-couchbase"
couchbaseHosts="localhost:8091"
bucketName="sling"
enabled=B"true"
See Apache Felix OSGi console for detailed documentation of the parameters. All resource data is stored in one Couchbase bucket. Each resource is stored as a document with the path as key.
Source code: Apache Sling NoSQL Couchbase Resource Provider
The resource provider requires and additional bundle Apache Sling NoSQL Couchbase Client which wraps the Couchbase Java SDK (which itself is not an OSGi bundle), and ensures that the Couchbase Environment instance is used as a singleton in the VM.
An example launchpad is provided that contains the NoSQL resource providers configured as main resource provider at /
.
Source code: Apache Sling NoSQL Launchpad
See README for details how to start the launchpad.