Data Source
A MongoDB based implementation of the Space Data Source.
Library dependencies
The MongoDB Space Data Source uses MongoDB Driver For communicating with the MongoDB cluster.
include the following in your pom.xml
<!-- currently the MongoDB library is not the central maven repository -->
<repositories>
<repository>
<id>org.openspaces</id>
<name>OpenSpaces</name>
<url>http://maven-repository.openspaces.org</url>
</repository>
</repositories>
<dependencies>
...
<!-- mongodb java driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.gigaspaces</groupId>
<artifactId>mongo-datasource</artifactId>
<version>10.0.0-SNAPSHOT</version>
</dependency>
...
</dependencies>
Setup
An example of how the MongoDB Space Data Source can be configured for a space that loads data back from MongoDB once initialized and also asynchronously persists the data using a mirror (see MongoDB Space Synchronization Endpoint)).
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:os-core="http://www.openspaces.org/schema/core" xmlns:os-jms="http://www.openspaces.org/schema/jms"
xmlns:os-events="http://www.openspaces.org/schema/events"
xmlns:os-remoting="http://www.openspaces.org/schema/remoting"
xmlns:os-sla="http://www.openspaces.org/schema/sla" xmlns:tx="http://www.springframework.org/schema/tx"
spring
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
spring
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.openspaces.org/schema/core http://www.openspaces.org/schema/10.0/core/openspaces-core.xsd
http://www.openspaces.org/schema/events http://www.openspaces.org/schema/10.0/events/openspaces-events.xsd
spring
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.openspaces.org/schema/remoting http://www.openspaces.org/schema/10.0/remoting/openspaces-remoting.xsd">
<bean id="propertiesConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" />
<os-core:embedded-space id="space" name="dataSourceSpace">
space-data-source="spaceDataSource" mirrored="true" schema="persistent">
<os-core:properties>
<props>
<!-- Use ALL IN CACHE, put 0 for LRU -->
<prop key="space-config.engine.cache_policy">1</prop>
<prop key="cluster-config.cache-loader.central-data-source">true</prop>
<prop key="cluster-config.mirror-service.supports-partial-update">true</prop>
</props>
</os-core:properties>
</os-core:embedded-space>
<os-core:giga-space id="gigaSpace" space="space" />
<bean id="mongoClient" class="com.gigaspaces.persistency.MongoClientConnectorBeanFactory">
<property name="db" value="qadb" />
<property name="config">
<bean class="com.mongodb.MongoClient">
<constructor-arg value="localhost" type="java.lang.String" />
<constructor-arg value="27017" type="int" />
</bean>
</property>
</bean>
<bean id="spaceDataSource" class="com.gigaspaces.persistency.MongoSpaceDataSourceBeanFactory">
<property name="mongoClientConnector" ref="mongoClient" />
</bean>
</beans>
MongoClient config = new MongoClient(host, port);
MongoClientConnector client = new MongoClientConnectorConfigurer()
.client(config)
.db(dbName)
.create();
MongoSpaceDataSource spaceDataSource = new MongoSpaceDataSourceConfigurer()
.mongoClientConnector(client)
.create();
GigaSpace gigaSpace = new GigaSpaceConfigurer(new UrlSpaceConfigurer("/./space")
.schema("persistent")
.mirror(true)
.cachePolicy(new LruCachePolicy())
.addProperty("cluster-config.cache-loader.central-data-source", "true")
.addProperty("cluster-config.mirror-service.supports-partial-update", "true")
.spaceDataSource(spaceDataSource)
.space()).gigaSpace();
For more details about different configurations see Space Persistency.
Before you begin
Before deploying your Processing Unit, please do the following:
- Copy the
mongo-datasource.jar
fromlib\optional\datasource\mongo
tolib\optional\pu-common
. download the following jars and copy them to
lib\optional\pu-common
:antlr-runtime.jar
from antlr’s website .mongo-java-driver-2.11.2.jar
from mongoDB’s website .guava-r08.jar
from Guava-project’s website . NOTE: you must download Guava’s release 08, and extract theguava-r08.jar
from within theguava-r08.zip
that you have downloaded
MongoSpaceDataSource
Properties
Property | Description | Default |
---|---|---|
mongoClientConnector | A configured com.gigaspaces.persistency.MongoClientConnector bean. Must be configured |
Considerations
General limitations
- All classes that belong to types that are to be introduced to the space during the initial metadata load must exist on the classpath of the JVM the Space is running on.
Cache miss Query limitations
Supported queries:
id = 1234
name = 'John' AND age = 13
address.streetName = 'Liberty'
age > 15
age < 20
age <= 20
age >= 15
name = 'John' OR name = 'Jane'
name rlike 'A.*B'
name like 'A%'
name is NULL
name is NOT NULL
note: java types Short, Float, BigDecimal and BigInt supported only =,<> queries >,<,>=,<= is not supported.
Unsupported queries:
- Contains is unsupported
Mongo As a Service
There are some Mongo DB hosting services that run on the cloud, and you can connect to them from your deployment environment for free. For example: mongolab
In order to configure the connection, you would need to connect using a URI that contains the username and password.
<bean id="mongoClient"
class="com.gigaspaces.persistency.MongoClientConnectorBeanFactory">
<property name="db" value="xapdb" />
<property name="config">
<bean class="com.mongodb.MongoClient">
<constructor-arg>
<bean class="com.mongodb.MongoClientURI">
<constructor-arg value="mongodb://<DB_USERNAME>:<DB_PASSWORD>@ds027017.mongolab.com:27017/xapdb" type="java.lang.String"/>
</bean>
</constructor-arg>
</bean>
</property>
</bean>