Benak Raj
Benak Raj

Reputation: 328

Multiple Persistence Store for Apache Ignite

I have one use case where I have to support multiple persistence store for my ignite cluster,For example Cache A1 should be primed from Database db1 and Cache B1 should be primed from database db2. can this be done?.In ignite Configuration XML I can only provide one persistence store details,

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util.xsd">

<!-- Datasource for Persistence. -->
<bean name="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:roc12c" />
    <property name="username" value="test" />
    <property name="password" value="test" />
</bean>

In my CacheStore implementation I can only access this Database right?.

Upvotes: 2

Views: 886

Answers (2)

Valentin Kulichenko
Valentin Kulichenko

Reputation: 8390

Cache store is configured per cache, so you just need to inject different data sources to different stores. What you showed is just a standalone data source bean, it's not even a part of IgniteConfiguration. You can have multiple data source beans with different IDs.

Upvotes: 2

Carlos Bribiescas
Carlos Bribiescas

Reputation: 4407

I've not tried this, but if its similar to other bean-configured systems. You should be able to create another bean with a different name and configuration. Then in your cache configuration for A1 and B1 specify the different data sources. That being said, I'm guessing that theoretically.

It may be that you are already doing so, but I can't tell from your question. If you instead choose to implement your caches in this manner https://apacheignite.readme.io/docs/persistent-store you can definitely configure two caches to have different data sources. This is how I'm currently implementing multiple caches. In the cache store I use I specifically call out which database to go to.

Here is a cache configuration I use for mine.

    <property name="cacheConfiguration">
        <bean class="org.apache.ignite.configuration.CacheConfiguration">
            <!-- Set a cache name. -->
            <property name="name" value="recordData"/>
            <property name="rebalanceMode" value="ASYNC"/>
            <property name="cacheMode" value="PARTITIONED"/>
            <property name="backups" value="1"/>
            <!-- Enable Off-Heap memory with max size of 10 Gigabytes (0 for unlimited). -->
            <property name="memoryMode" value="OFFHEAP_TIERED"/>
            <property name="offHeapMaxMemory" value="0"/>
            <property name="swapEnabled" value="false"/> 

            <property name="cacheStoreFactory">
                <bean class="javax.cache.configuration.FactoryBuilder" factory-method="factoryOf">
                    <constructor-arg value="com.company.util.MyDataStore"/>
                </bean>
            </property>
            <property name="readThrough" value="true"/>
            <property name="writeThrough"  value="true"/>

        </bean>
    </property>

Upvotes: 3

Related Questions