Couchbase Data Store - BloomReach Experience - Open Source CMS

Couchbase Data Store

Introduction

The Relevance Module requires a data storage solution for persisting visitor data, request log data, and statistics data. Using Couchbase will provide you with a high performance and reliable storage solution that supports accumulation of a lot of data.

Installation

First download and install Couchbase Server by following the instructions on the download page. Hippo only supports Couchbase Server Enterprise Edition in production, so make sure to download that edition.

In most development phases, you can simply use the default In-Memory Data Store without having to use a Couchbase Server, but you can also use Couchbase Server Community Edition for local development purposes if you need to develop and test it more closely with Couchbase Server environment.

Then add the following maven dependency to your site pom:

    <dependency>
      <groupId>com.onehippo.cms7</groupId>
      <artifactId>hippo-addon-targeting-state-couchbase</artifactId>
      <scope>runtime</scope>
      <version>${hippo.addon-targeting.version}</version>
    </dependency>

Configuration

Change the targeting data store configuration via the Console application:

/targeting:targeting/targeting:datastores/targeting:targetingdata
- targeting:storefactoryclass =
         com.onehippo.cms7.targeting.storage.couchbase.CouchbaseStoreFactory
/targeting:targeting/targeting:datastores/targeting:requestlog
- targeting:storefactoryclass =
         com.onehippo.cms7.targeting.storage.couchbase.CouchbaseStoreFactory
/targeting:targeting/targeting:datastores/targeting:statistics
- targeting:storefactoryclass =
         com.onehippo.cms7.targeting.storage.couchbase.CouchbaseStoreFactory 

The following additional properties are supported on all stores:

property type default description
locations (multipe) string localhost

A multi-valued string property containing locations of nodes in the couchbase cluster to connect to. One location is enough to connect to the cluster. Specifying multiple locations adds robustness for the startup process. The locations are of the form <hostname> or <hostname>:<port>.

If you create this property in the console, make sure you check the field Multi value.

bucketName string targeting The name of the couchbase bucket (roughly equivalent to a database in rdbms) to use.
password string none Optional password if you password-protected the bucket.
timeToLiveSeconds long infinite How long items stored by this store should be kept by Couchbase, in seconds. 
retrieveVisitorTimeoutMillis long 10

The time in milliseconds to wait for a connection with the relevance data store to be established.

Note that in Hippo CMS 10.1 the default was 20 ms.

Configure Couchbase

Create the Couchbase bucket(s) to hold the visitor data. With the couchbase web interface, this can be achieved by going to the 'Data Buckets' page and clicking 'Create New Data Bucket'. In the form that follows, configure the bucket name (corresponding to what's configured for the stores). Make sure you choose 'Couchbase' as the bucket type. It is also recommended to set 'Cache Metadata' to 'Full Eviction', otherwise every item in the bucket will consume memory resources even when not being accessed.

Couchbase Environment

It is occasionally necessary to adjust for example time-outs and other connection behaviour. This can be done passing system properties, for example -Dcom.couchbase.kvTimeout=10000. These settings apply at a global level and are not per data store. A full list of system properties can be found in the Couchbase documentation.

Troubleshooting

Problems with the Couchbase Java client have been reported where connections to the server were timing out. This seems to occur specifically when the server locations are specified as ip addresses. A workaround is to use a host name for the Couchbase server. For instance by adding an entry for it to the /etc/hosts file.

Did you find this page helpful?
How could this documentation serve you better?
On this page
    Did you find this page helpful?
    How could this documentation serve you better?