L2-cache slow/not working as intended

classic Classic list List threaded Threaded
10 messages Options
Bastien Durel Bastien Durel
Reply | Threaded
Open this post in threaded view
|

L2-cache slow/not working as intended

Hello,

I'm using an ignite cluster to back an hibernate-based application. I
configured L2-cache as explained in
https://ignite.apache.org/docs/latest/extensions-and-integrations/hibernate-l2-cache

(config below)

I've ran a test reading a 1M-elements cache with a consumer counting
elements. It's very slow : more than 5 minutes to run.

Session metrics says it was the LC2 puts that takes most time (5
minutes and 3 seconds of a 5:12" operation)

INFO  [2020-11-05 09:51:15,694] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics {
    33350 nanoseconds spent acquiring 1 JDBC connections;
    25370 nanoseconds spent releasing 1 JDBC connections;
    571572 nanoseconds spent preparing 1 JDBC statements;
    1153110307 nanoseconds spent executing 1 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    303191158712 nanoseconds spent performing 1000000 L2C puts;
    23593547 nanoseconds spent performing 1 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    370656057 nanoseconds spent executing 1 flushes (flushing a total of 1000001 entities and 2 collections);
    4684 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}

It seems long, event for 1M puts, but ok, let's say the L2C is
initialized now, and it will be better next time ? So I ran the query
again, but it took 5+ minutes again ...

INFO  [2020-11-05 09:58:02,538] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics {
    28982 nanoseconds spent acquiring 1 JDBC connections;
    25974 nanoseconds spent releasing 1 JDBC connections;
    52468 nanoseconds spent preparing 1 JDBC statements;
    1145821128 nanoseconds spent executing 1 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    303763054228 nanoseconds spent performing 1000000 L2C puts;
    1096985 nanoseconds spent performing 1 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    317558122 nanoseconds spent executing 1 flushes (flushing a total of 1000001 entities and 2 collections);
    5500 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}

Why does the L2 cache had to be filled again ? Isn't his purpose was to
share it between Sessions ?

Actually, disabling it make the test runs in less that 6 seconds.

Why is L2C working that way ?

Regards,


******

I'm running 2.9.0 from Debian package

Hibernate properties :
    hibernate.cache.use_second_level_cache: true
    hibernate.generate_statistics: true
    hibernate.cache.region.factory_class: org.apache.ignite.cache.hibernate.HibernateRegionFactory
    org.apache.ignite.hibernate.ignite_instance_name: ClusterWA
    org.apache.ignite.hibernate.default_access_type: READ_ONLY

Method code:
        @GET
        @Timed
        @UnitOfWork
        @Path("/events/speed")
        public Response getAllEvents(@Auth AuthenticatedUser auth) {
                AtomicLong id = new AtomicLong();
                StopWatch watch = new StopWatch();
                watch.start();
                evtDao.findAll().forEach(new Consumer<Event>() {

                        @Override
                        public void accept(Event t) {
                                long cur = id.incrementAndGet();
                                if (cur % 65536 == 0)
                                        logger.debug("got element#{}", cur);
                        }
                });
                watch.stop();
                return Response.ok().header("X-Count", Long.toString(id.longValue())).entity(new Time(watch)).build();
        }

Event cache config:


                                <bean
                                        class="org.apache.ignite.configuration.CacheConfiguration">
                                        <property name="name" value="EventCache" />
                                        <property name="cacheMode" value="PARTITIONED" />
                                        <property name="atomicityMode" value="TRANSACTIONAL" />
                                        <property name="backups" value="1" />
                                        <property name="readFromBackup" value="true" />
                                        <property name="copyOnRead" value="true" />
                                        <property name="dataRegionName" value="Disk" />

                                        <property name="keyConfiguration">
                                                <list>
                                                        <bean class="org.apache.ignite.cache.CacheKeyConfiguration">
                                                                <constructor-arg
                                                                        value="fr.data.wa.db.ignite.EventKey" />
                                                                <constructor-arg value="clientId" />
                                                        </bean>
                                                </list>
                                        </property>

                                        <property name="eagerTtl" value="true" />

                                        <property name="queryEntities">
                                                <list>
                                                        <bean class="org.apache.ignite.cache.QueryEntity">
                                                                <property name="keyType"
                                                                        value="fr.data.wa.db.ignite.EventKey" />
                                                                <property name="valueType"
                                                                        value="fr.data.wa.db.ignite.Event" />
                                                                <property name="tableName" value="Event" />

                                                                <property name="keyFields">
                                                                        <list>
                                                                                <value>clientId</value>
                                                                                <value>eventDate</value>
                                                                                <value>num</value>
                                                                        </list>
                                                                </property>

                                                                <property name="fields">
                                                                        <map>
                                                                                <entry key="clientId" value="java.lang.Long" />
                                                                                <entry key="eventDate" value="java.sql.Timestamp" />
                                                                                <entry key="num" value="java.lang.Long" />
                                                                                <entry key="type" value="java.lang.String" />
                                                                                <entry key="source" value="java.lang.String" />
                                                                                <entry key="entity" value="java.lang.String" />
                                                                                <entry key="entityId" value="java.lang.Long" />
                                                                                <entry key="data" value="java.lang.String" />
                                                                        </map>
                                                                </property>

                                                                <property name="aliases">
                                                                        <map>
                                                                                <entry key="eventDate" value="event_date" />
                                                                                <entry key="clientId" value="client_id" />
                                                                                <entry key="entityId" value="entity_id" />
                                                                        </map>
                                                                </property>

                                                                <property name="notNullFields">
                                                                        <list>
                                                                                <value>clientId</value>
                                                                                <value>eventDate</value>
                                                                                <value>num</value>
                                                                                <value>type</value>
                                                                                <value>source</value>
                                                                        </list>
                                                                </property>

                                                                <property name="indexes">
                                                                        <list>
                                                                                <bean class="org.apache.ignite.cache.QueryIndex">
                                                                                        <property name="name" value="event_pk" />
                                                                                        <property name="indexType" value="SORTED" />

                                                                                        <property name="fields">
                                                                                                <map>
                                                                                                        <entry key="clientId" value="true" />
                                                                                                        <entry key="eventDate" value="true" />
                                                                                                        <entry key="num" value="true" />
                                                                                                </map>
                                                                                        </property>
                                                                                </bean>
                                                                        </list>
                                                                </property>
                                                        </bean>
                                                </list>
                                        </property>
                                </bean>

                                <bean parent="transactional-cache">
                                        <property name="name" value="fr.data.wa.db.hb.Event" />
                                </bean>


Hibernate Event entity :

package fr.data.wa.db.hb;
@Entity(name = "event")
@Table(name = "\"EventCache\".event")
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class Event implements java.io.Serializable {
        private static final long serialVersionUID = -3536013579696669860L;


        @Id
        @Column(name = "client_id", insertable = false, updatable = false)
        private long clientId;
        @Id
        @Column(name = "event_date")
        private Date eventDate;
        @Id
        @Column
        private long num;
        /* [...] */
}

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr


ezhuravlev ezhuravlev
Reply | Threaded
Open this post in threaded view
|

Re: L2-cache slow/not working as intended

Hi,

How many nodes do you have? Can you check the same scenario with one node only? How do you run queries? Is client on the same machine as a server node?

I would recommend enabling DEBUG logs for org.apache.ignite.cache.hibernate package. DEBUG logs can show all get and put operations for hibernate cache. 

Best Regards,
Evgenii

чт, 5 нояб. 2020 г. в 01:59, Bastien Durel <[hidden email]>:
Hello,

I'm using an ignite cluster to back an hibernate-based application. I
configured L2-cache as explained in
https://ignite.apache.org/docs/latest/extensions-and-integrations/hibernate-l2-cache

(config below)

I've ran a test reading a 1M-elements cache with a consumer counting
elements. It's very slow : more than 5 minutes to run.

Session metrics says it was the LC2 puts that takes most time (5
minutes and 3 seconds of a 5:12" operation)

INFO  [2020-11-05 09:51:15,694] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics {
    33350 nanoseconds spent acquiring 1 JDBC connections;
    25370 nanoseconds spent releasing 1 JDBC connections;
    571572 nanoseconds spent preparing 1 JDBC statements;
    1153110307 nanoseconds spent executing 1 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    303191158712 nanoseconds spent performing 1000000 L2C puts;
    23593547 nanoseconds spent performing 1 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    370656057 nanoseconds spent executing 1 flushes (flushing a total of 1000001 entities and 2 collections);
    4684 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}

It seems long, event for 1M puts, but ok, let's say the L2C is
initialized now, and it will be better next time ? So I ran the query
again, but it took 5+ minutes again ...

INFO  [2020-11-05 09:58:02,538] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics {
    28982 nanoseconds spent acquiring 1 JDBC connections;
    25974 nanoseconds spent releasing 1 JDBC connections;
    52468 nanoseconds spent preparing 1 JDBC statements;
    1145821128 nanoseconds spent executing 1 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    303763054228 nanoseconds spent performing 1000000 L2C puts;
    1096985 nanoseconds spent performing 1 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    317558122 nanoseconds spent executing 1 flushes (flushing a total of 1000001 entities and 2 collections);
    5500 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}

Why does the L2 cache had to be filled again ? Isn't his purpose was to
share it between Sessions ?

Actually, disabling it make the test runs in less that 6 seconds.

Why is L2C working that way ?

Regards,


******

I'm running 2.9.0 from Debian package

Hibernate properties :
    hibernate.cache.use_second_level_cache: true
    hibernate.generate_statistics: true
    hibernate.cache.region.factory_class: org.apache.ignite.cache.hibernate.HibernateRegionFactory
    org.apache.ignite.hibernate.ignite_instance_name: ClusterWA
    org.apache.ignite.hibernate.default_access_type: READ_ONLY

Method code:
        @GET
        @Timed
        @UnitOfWork
        @Path("/events/speed")
        public Response getAllEvents(@Auth AuthenticatedUser auth) {
                AtomicLong id = new AtomicLong();
                StopWatch watch = new StopWatch();
                watch.start();
                evtDao.findAll().forEach(new Consumer<Event>() {

                        @Override
                        public void accept(Event t) {
                                long cur = id.incrementAndGet();
                                if (cur % 65536 == 0)
                                        logger.debug("got element#{}", cur);
                        }
                });
                watch.stop();
                return Response.ok().header("X-Count", Long.toString(id.longValue())).entity(new Time(watch)).build();
        }

Event cache config:


                                <bean
                                        class="org.apache.ignite.configuration.CacheConfiguration">
                                        <property name="name" value="EventCache" />
                                        <property name="cacheMode" value="PARTITIONED" />
                                        <property name="atomicityMode" value="TRANSACTIONAL" />
                                        <property name="backups" value="1" />
                                        <property name="readFromBackup" value="true" />
                                        <property name="copyOnRead" value="true" />
                                        <property name="dataRegionName" value="Disk" />

                                        <property name="keyConfiguration">
                                                <list>
                                                        <bean class="org.apache.ignite.cache.CacheKeyConfiguration">
                                                                <constructor-arg
                                                                        value="fr.data.wa.db.ignite.EventKey" />
                                                                <constructor-arg value="clientId" />
                                                        </bean>
                                                </list>
                                        </property>

                                        <property name="eagerTtl" value="true" />

                                        <property name="queryEntities">
                                                <list>
                                                        <bean class="org.apache.ignite.cache.QueryEntity">
                                                                <property name="keyType"
                                                                        value="fr.data.wa.db.ignite.EventKey" />
                                                                <property name="valueType"
                                                                        value="fr.data.wa.db.ignite.Event" />
                                                                <property name="tableName" value="Event" />

                                                                <property name="keyFields">
                                                                        <list>
                                                                                <value>clientId</value>
                                                                                <value>eventDate</value>
                                                                                <value>num</value>
                                                                        </list>
                                                                </property>

                                                                <property name="fields">
                                                                        <map>
                                                                                <entry key="clientId" value="java.lang.Long" />
                                                                                <entry key="eventDate" value="java.sql.Timestamp" />
                                                                                <entry key="num" value="java.lang.Long" />
                                                                                <entry key="type" value="java.lang.String" />
                                                                                <entry key="source" value="java.lang.String" />
                                                                                <entry key="entity" value="java.lang.String" />
                                                                                <entry key="entityId" value="java.lang.Long" />
                                                                                <entry key="data" value="java.lang.String" />
                                                                        </map>
                                                                </property>

                                                                <property name="aliases">
                                                                        <map>
                                                                                <entry key="eventDate" value="event_date" />
                                                                                <entry key="clientId" value="client_id" />
                                                                                <entry key="entityId" value="entity_id" />
                                                                        </map>
                                                                </property>

                                                                <property name="notNullFields">
                                                                        <list>
                                                                                <value>clientId</value>
                                                                                <value>eventDate</value>
                                                                                <value>num</value>
                                                                                <value>type</value>
                                                                                <value>source</value>
                                                                        </list>
                                                                </property>

                                                                <property name="indexes">
                                                                        <list>
                                                                                <bean class="org.apache.ignite.cache.QueryIndex">
                                                                                        <property name="name" value="event_pk" />
                                                                                        <property name="indexType" value="SORTED" />

                                                                                        <property name="fields">
                                                                                                <map>
                                                                                                        <entry key="clientId" value="true" />
                                                                                                        <entry key="eventDate" value="true" />
                                                                                                        <entry key="num" value="true" />
                                                                                                </map>
                                                                                        </property>
                                                                                </bean>
                                                                        </list>
                                                                </property>
                                                        </bean>
                                                </list>
                                        </property>
                                </bean>

                                <bean parent="transactional-cache">
                                        <property name="name" value="fr.data.wa.db.hb.Event" />
                                </bean>


Hibernate Event entity :

package fr.data.wa.db.hb;
@Entity(name = "event")
@Table(name = "\"EventCache\".event")
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class Event implements java.io.Serializable {
        private static final long serialVersionUID = -3536013579696669860L;


        @Id
        @Column(name = "client_id", insertable = false, updatable = false)
        private long clientId;
        @Id
        @Column(name = "event_date")
        private Date eventDate;
        @Id
        @Column
        private long num;
        /* [...] */
}

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr


ilya.kasnacheev ilya.kasnacheev
Reply | Threaded
Open this post in threaded view
|

Re: L2-cache slow/not working as intended

In reply to this post by Bastien Durel
Hello!

Putting 1 million entries of a single query in L2 cache does not sound like a reasonable use of L2 cache.

Regards,
--
Ilya Kasnacheev


чт, 5 нояб. 2020 г. в 12:59, Bastien Durel <[hidden email]>:
Hello,

I'm using an ignite cluster to back an hibernate-based application. I
configured L2-cache as explained in
https://ignite.apache.org/docs/latest/extensions-and-integrations/hibernate-l2-cache

(config below)

I've ran a test reading a 1M-elements cache with a consumer counting
elements. It's very slow : more than 5 minutes to run.

Session metrics says it was the LC2 puts that takes most time (5
minutes and 3 seconds of a 5:12" operation)

INFO  [2020-11-05 09:51:15,694] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics {
    33350 nanoseconds spent acquiring 1 JDBC connections;
    25370 nanoseconds spent releasing 1 JDBC connections;
    571572 nanoseconds spent preparing 1 JDBC statements;
    1153110307 nanoseconds spent executing 1 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    303191158712 nanoseconds spent performing 1000000 L2C puts;
    23593547 nanoseconds spent performing 1 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    370656057 nanoseconds spent executing 1 flushes (flushing a total of 1000001 entities and 2 collections);
    4684 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}

It seems long, event for 1M puts, but ok, let's say the L2C is
initialized now, and it will be better next time ? So I ran the query
again, but it took 5+ minutes again ...

INFO  [2020-11-05 09:58:02,538] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics {
    28982 nanoseconds spent acquiring 1 JDBC connections;
    25974 nanoseconds spent releasing 1 JDBC connections;
    52468 nanoseconds spent preparing 1 JDBC statements;
    1145821128 nanoseconds spent executing 1 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    303763054228 nanoseconds spent performing 1000000 L2C puts;
    1096985 nanoseconds spent performing 1 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    317558122 nanoseconds spent executing 1 flushes (flushing a total of 1000001 entities and 2 collections);
    5500 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}

Why does the L2 cache had to be filled again ? Isn't his purpose was to
share it between Sessions ?

Actually, disabling it make the test runs in less that 6 seconds.

Why is L2C working that way ?

Regards,


******

I'm running 2.9.0 from Debian package

Hibernate properties :
    hibernate.cache.use_second_level_cache: true
    hibernate.generate_statistics: true
    hibernate.cache.region.factory_class: org.apache.ignite.cache.hibernate.HibernateRegionFactory
    org.apache.ignite.hibernate.ignite_instance_name: ClusterWA
    org.apache.ignite.hibernate.default_access_type: READ_ONLY

Method code:
        @GET
        @Timed
        @UnitOfWork
        @Path("/events/speed")
        public Response getAllEvents(@Auth AuthenticatedUser auth) {
                AtomicLong id = new AtomicLong();
                StopWatch watch = new StopWatch();
                watch.start();
                evtDao.findAll().forEach(new Consumer<Event>() {

                        @Override
                        public void accept(Event t) {
                                long cur = id.incrementAndGet();
                                if (cur % 65536 == 0)
                                        logger.debug("got element#{}", cur);
                        }
                });
                watch.stop();
                return Response.ok().header("X-Count", Long.toString(id.longValue())).entity(new Time(watch)).build();
        }

Event cache config:


                                <bean
                                        class="org.apache.ignite.configuration.CacheConfiguration">
                                        <property name="name" value="EventCache" />
                                        <property name="cacheMode" value="PARTITIONED" />
                                        <property name="atomicityMode" value="TRANSACTIONAL" />
                                        <property name="backups" value="1" />
                                        <property name="readFromBackup" value="true" />
                                        <property name="copyOnRead" value="true" />
                                        <property name="dataRegionName" value="Disk" />

                                        <property name="keyConfiguration">
                                                <list>
                                                        <bean class="org.apache.ignite.cache.CacheKeyConfiguration">
                                                                <constructor-arg
                                                                        value="fr.data.wa.db.ignite.EventKey" />
                                                                <constructor-arg value="clientId" />
                                                        </bean>
                                                </list>
                                        </property>

                                        <property name="eagerTtl" value="true" />

                                        <property name="queryEntities">
                                                <list>
                                                        <bean class="org.apache.ignite.cache.QueryEntity">
                                                                <property name="keyType"
                                                                        value="fr.data.wa.db.ignite.EventKey" />
                                                                <property name="valueType"
                                                                        value="fr.data.wa.db.ignite.Event" />
                                                                <property name="tableName" value="Event" />

                                                                <property name="keyFields">
                                                                        <list>
                                                                                <value>clientId</value>
                                                                                <value>eventDate</value>
                                                                                <value>num</value>
                                                                        </list>
                                                                </property>

                                                                <property name="fields">
                                                                        <map>
                                                                                <entry key="clientId" value="java.lang.Long" />
                                                                                <entry key="eventDate" value="java.sql.Timestamp" />
                                                                                <entry key="num" value="java.lang.Long" />
                                                                                <entry key="type" value="java.lang.String" />
                                                                                <entry key="source" value="java.lang.String" />
                                                                                <entry key="entity" value="java.lang.String" />
                                                                                <entry key="entityId" value="java.lang.Long" />
                                                                                <entry key="data" value="java.lang.String" />
                                                                        </map>
                                                                </property>

                                                                <property name="aliases">
                                                                        <map>
                                                                                <entry key="eventDate" value="event_date" />
                                                                                <entry key="clientId" value="client_id" />
                                                                                <entry key="entityId" value="entity_id" />
                                                                        </map>
                                                                </property>

                                                                <property name="notNullFields">
                                                                        <list>
                                                                                <value>clientId</value>
                                                                                <value>eventDate</value>
                                                                                <value>num</value>
                                                                                <value>type</value>
                                                                                <value>source</value>
                                                                        </list>
                                                                </property>

                                                                <property name="indexes">
                                                                        <list>
                                                                                <bean class="org.apache.ignite.cache.QueryIndex">
                                                                                        <property name="name" value="event_pk" />
                                                                                        <property name="indexType" value="SORTED" />

                                                                                        <property name="fields">
                                                                                                <map>
                                                                                                        <entry key="clientId" value="true" />
                                                                                                        <entry key="eventDate" value="true" />
                                                                                                        <entry key="num" value="true" />
                                                                                                </map>
                                                                                        </property>
                                                                                </bean>
                                                                        </list>
                                                                </property>
                                                        </bean>
                                                </list>
                                        </property>
                                </bean>

                                <bean parent="transactional-cache">
                                        <property name="name" value="fr.data.wa.db.hb.Event" />
                                </bean>


Hibernate Event entity :

package fr.data.wa.db.hb;
@Entity(name = "event")
@Table(name = "\"EventCache\".event")
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class Event implements java.io.Serializable {
        private static final long serialVersionUID = -3536013579696669860L;


        @Id
        @Column(name = "client_id", insertable = false, updatable = false)
        private long clientId;
        @Id
        @Column(name = "event_date")
        private Date eventDate;
        @Id
        @Column
        private long num;
        /* [...] */
}

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr


Bastien Durel Bastien Durel
Reply | Threaded
Open this post in threaded view
|

Re: L2-cache slow/not working as intended

In reply to this post by ezhuravlev
Le vendredi 06 novembre 2020 à 11:22 -0800, Evgenii Zhuravlev a écrit :
> Hi,
> How many nodes do you have? Can you check the same scenario with one
> node only? How do you run queries? Is client on the same machine as a
> server node?
>
Hello.
I have 2 nodes, running on differents VMs on the same host.

The cache is partitionned on clientId field, which is the same for all
entries in the cache, so all entries must be colocated.

With only one node up, I get the same results.

> I would recommend enabling DEBUG logs
> for org.apache.ignite.cache.hibernate package. DEBUG logs can show
> all get and put operations for hibernate cache. 
>

With DEBUG, I have hundreds of puts for Event objects (which I
retrieve)


DEBUG [2020-11-09 09:59:34,496] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Get [cache=fr.data.wa.db.hb.User, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.User, tenantId=null], val=null]
DEBUG [2020-11-09 09:59:34,507] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.User, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.User, tenantId=null], val=CacheEntry(fr.data.wa.db.h
b.User)]
DEBUG [2020-11-09 09:59:34,508] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Client, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Client, tenantId=null], val=CacheEntry(fr.data.wa.
db.hb.Client)]
DEBUG [2020-11-09 09:59:34,509] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Token, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Token, tenantId=null], val=CacheEntry(fr.data.wa.db
.hb.Token)]
DEBUG [2020-11-09 09:59:34,518] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Role, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Role, tenantId=null], val=CacheEntry(fr.data.wa.db.h
b.Role)]
DEBUG [2020-11-09 09:59:34,519] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Role, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Role, tenantId=null], val=CacheEntry(fr.data.wa.db.h
b.Role)]
INFO  [2020-11-09 09:59:34,521] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics {
    51258 nanoseconds spent acquiring 1 JDBC connections;
    32665 nanoseconds spent releasing 1 JDBC connections;
    183511 nanoseconds spent preparing 3 JDBC statements;
    8031879 nanoseconds spent executing 3 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    7180813 nanoseconds spent performing 5 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    1474335 nanoseconds spent performing 1 L2C misses;
    621965 nanoseconds spent executing 1 flushes (flushing a total of 5 entities and 9 collections);
    4300 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}
DEBUG [2020-11-09 09:59:35,106] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Get [cache=fr.data.wa.db.hb.Client, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Client, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Client)]
DEBUG [2020-11-09 09:59:35,107] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
[...]
DEBUG [2020-11-09 10:00:06,363] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,363] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,363] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,363] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,364] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,364] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,364] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,365] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,365] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,365] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,366] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,366] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,366] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,366] org.apache.ignite.cache.hibernate.HibernateTransactionalAccessStrategy: Put [cache=fr.data.wa.db.hb.Event, key=HibernateKeyWrapper [entry=fr.data.wa.db.hb.Event, tenantId=null], val=CacheEntry(fr.data.wa.db.hb.Event)]
DEBUG [2020-11-09 10:00:06,389] fr.data.wa.resources.TestResource: got element#65536
INFO  [2020-11-09 10:00:06,465] org.hibernate.engine.internal.StatisticalLoggingSessionEventListener: Session Metrics {
    24135 nanoseconds spent acquiring 1 JDBC connections;
    26856 nanoseconds spent releasing 1 JDBC connections;
    44297 nanoseconds spent preparing 1 JDBC statements;
    112090383 nanoseconds spent executing 1 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    30735991895 nanoseconds spent performing 100000 L2C puts;
    1426335 nanoseconds spent performing 1 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    69531442 nanoseconds spent executing 1 flushes (flushing a total of 100001 entities and 2 collections);
    3555 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}

The first session is Authentification, which misses the User, and the
second one te Event's get ... This is the second time I called the same
function on this server since it starts.

Regards,


чт, 5 нояб. 2020 г. в 01:59, Bastien Durel <[hidden email]>:

> Hello,
>
> I'm using an ignite cluster to back an hibernate-based application.
> I
> configured L2-cache as explained in
>  
> https://ignite.apache.org/docs/latest/extensions-and-integrations/hibernate-l2-cache
>
> (config below)
>
> I've ran a test reading a 1M-elements cache with a consumer
> counting
> elements. It's very slow : more than 5 minutes to run.
>
> Session metrics says it was the LC2 puts that takes most time (5
> minutes and 3 seconds of a 5:12" operation)
>
> INFO  [2020-11-05 09:51:15,694]
> org.hibernate.engine.internal.StatisticalLoggingSessionEventListene
> r: Session Metrics {
>     33350 nanoseconds spent acquiring 1 JDBC connections;
>     25370 nanoseconds spent releasing 1 JDBC connections;
>     571572 nanoseconds spent preparing 1 JDBC statements;
>     1153110307 nanoseconds spent executing 1 JDBC statements;
>     0 nanoseconds spent executing 0 JDBC batches;
>     303191158712 nanoseconds spent performing 1000000 L2C puts;
>     23593547 nanoseconds spent performing 1 L2C hits;
>     0 nanoseconds spent performing 0 L2C misses;
>     370656057 nanoseconds spent executing 1 flushes (flushing a
> total of 1000001 entities and 2 collections);
>     4684 nanoseconds spent executing 1 partial-flushes (flushing a
> total of 0 entities and 0 collections)
> }
>
> It seems long, event for 1M puts, but ok, let's say the L2C is
> initialized now, and it will be better next time ? So I ran the
> query
> again, but it took 5+ minutes again ...
>
> INFO  [2020-11-05 09:58:02,538]
> org.hibernate.engine.internal.StatisticalLoggingSessionEventListene
> r: Session Metrics {
>     28982 nanoseconds spent acquiring 1 JDBC connections;
>     25974 nanoseconds spent releasing 1 JDBC connections;
>     52468 nanoseconds spent preparing 1 JDBC statements;
>     1145821128 nanoseconds spent executing 1 JDBC statements;
>     0 nanoseconds spent executing 0 JDBC batches;
>     303763054228 nanoseconds spent performing 1000000 L2C puts;
>     1096985 nanoseconds spent performing 1 L2C hits;
>     0 nanoseconds spent performing 0 L2C misses;
>     317558122 nanoseconds spent executing 1 flushes (flushing a
> total of 1000001 entities and 2 collections);
>     5500 nanoseconds spent executing 1 partial-flushes (flushing a
> total of 0 entities and 0 collections)
> }
>
> Why does the L2 cache had to be filled again ? Isn't his purpose
> was to
> share it between Sessions ?
>
> Actually, disabling it make the test runs in less that 6 seconds.
>
> Why is L2C working that way ?
>
> Regards,
>
>
> ******
>
> I'm running 2.9.0 from Debian package
>
> Hibernate properties :
>     hibernate.cache.use_second_level_cache: true
>     hibernate.generate_statistics: true
>     hibernate.cache.region.factory_class:
> org.apache.ignite.cache.hibernate.HibernateRegionFactory
>     org.apache.ignite.hibernate.ignite_instance_name: ClusterWA
>     org.apache.ignite.hibernate.default_access_type: READ_ONLY
>
> Method code:
>         @GET
>         @Timed
>         @UnitOfWork
>         @Path("/events/speed")
>         public Response getAllEvents(@Auth AuthenticatedUser auth)
> {
>                 AtomicLong id = new AtomicLong();
>                 StopWatch watch = new StopWatch();
>                 watch.start();
>                 evtDao.findAll().forEach(new Consumer<Event>() {
>
>                         @Override
>                         public void accept(Event t) {
>                                 long cur = id.incrementAndGet();
>                                 if (cur % 65536 == 0)
>                                         logger.debug("got
> element#{}", cur);
>                         }
>                 });
>                 watch.stop();
>                 return Response.ok().header("X-Count",
> Long.toString(id.longValue())).entity(new Time(watch)).build();
>         }
>
> Event cache config:
>
>
>                                 <bean
>                                        
> class="org.apache.ignite.configuration.CacheConfiguration">
>                                         <property name="name"
> value="EventCache" />
>                                         <property name="cacheMode"
> value="PARTITIONED" />
>                                         <property
> name="atomicityMode" value="TRANSACTIONAL" />
>                                         <property name="backups"
> value="1" />
>                                         <property
> name="readFromBackup" value="true" />
>                                         <property name="copyOnRead"
> value="true" />
>                                         <property
> name="dataRegionName" value="Disk" />
>
>                                         <property
> name="keyConfiguration">
>                                                 <list>
>                                                         <bean
> class="org.apache.ignite.cache.CacheKeyConfiguration">
>                                                                
> <constructor-arg
>                                                                    
>     value="fr.data.wa.db.ignite.EventKey" />
>                                                                
> <constructor-arg value="clientId" />
>                                                         </bean>
>                                                 </list>
>                                         </property>
>
>                                         <property name="eagerTtl"
> value="true" />
>
>                                         <property
> name="queryEntities">
>                                                 <list>
>                                                         <bean
> class="org.apache.ignite.cache.QueryEntity">
>                                                                
> <property name="keyType"
>                                                                    
>     value="fr.data.wa.db.ignite.EventKey" />
>                                                                
> <property name="valueType"
>                                                                    
>     value="fr.data.wa.db.ignite.Event" />
>                                                                
> <property name="tableName" value="Event" />
>
>                                                                
> <property name="keyFields">
>                                                                    
>     <list>
>                                                                    
>             <value>clientId</value>
>                                                                    
>             <value>eventDate</value>
>                                                                    
>             <value>num</value>
>                                                                    
>     </list>
>                                                                
> </property>
>
>                                                                
> <property name="fields">
>                                                                    
>     <map>
>                                                                    
>             <entry key="clientId" value="java.lang.Long" />
>                                                                    
>             <entry key="eventDate" value="java.sql.Timestamp" />
>                                                                    
>             <entry key="num" value="java.lang.Long" />
>                                                                    
>             <entry key="type" value="java.lang.String" />
>                                                                    
>             <entry key="source" value="java.lang.String" />
>                                                                    
>             <entry key="entity" value="java.lang.String" />
>                                                                    
>             <entry key="entityId" value="java.lang.Long" />
>                                                                    
>             <entry key="data" value="java.lang.String" />
>                                                                    
>     </map>
>                                                                
> </property>
>
>                                                                
> <property name="aliases">
>                                                                    
>     <map>
>                                                                    
>             <entry key="eventDate" value="event_date" />
>                                                                    
>             <entry key="clientId" value="client_id" />
>                                                                    
>             <entry key="entityId" value="entity_id" />
>                                                                    
>     </map>
>                                                                
> </property>
>
>                                                                
> <property name="notNullFields">
>                                                                    
>     <list>
>                                                                    
>             <value>clientId</value>
>                                                                    
>             <value>eventDate</value>
>                                                                    
>             <value>num</value>
>                                                                    
>             <value>type</value>
>                                                                    
>             <value>source</value>
>                                                                    
>     </list>
>                                                                
> </property>
>
>                                                                
> <property name="indexes">
>                                                                    
>     <list>
>                                                                    
>             <bean class="org.apache.ignite.cache.QueryIndex">
>                                                                    
>                     <property name="name" value="event_pk" />
>                                                                    
>                     <property name="indexType" value="SORTED" />
>
>                                                                    
>                     <property name="fields">
>                                                                    
>                             <map>
>                                                                    
>                                     <entry key="clientId"
> value="true" />
>                                                                    
>                                     <entry key="eventDate"
> value="true" />
>                                                                    
>                                     <entry key="num" value="true"
> />
>                                                                    
>                             </map>
>                                                                    
>                     </property>
>                                                                    
>             </bean>
>                                                                    
>     </list>
>                                                                
> </property>
>                                                         </bean>
>                                                 </list>
>                                         </property>
>                                 </bean>
>
>                                 <bean parent="transactional-cache">
>                                         <property name="name"
> value="fr.data.wa.db.hb.Event" />
>                                 </bean>
>
>
> Hibernate Event entity :
>
> package fr.data.wa.db.hb;
> @Entity(name = "event")
> @Table(name = "\"EventCache\".event")
> @Cacheable
> @org.hibernate.annotations.Cache(usage =
> CacheConcurrencyStrategy.TRANSACTIONAL)
> public class Event implements java.io.Serializable {
>         private static final long serialVersionUID = -
> 3536013579696669860L;
>
>
>         @Id
>         @Column(name = "client_id", insertable = false, updatable =
> false)
>         private long clientId;
>         @Id
>         @Column(name = "event_date")
>         private Date eventDate;
>         @Id
>         @Column
>         private long num;
>         /* [...] */
> }
>

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr


Bastien Durel Bastien Durel
Reply | Threaded
Open this post in threaded view
|

Re: L2-cache slow/not working as intended

In reply to this post by ilya.kasnacheev
Le lundi 09 novembre 2020 à 14:09 +0300, Ilya Kasnacheev a écrit :
> Hello!
> Putting 1 million entries of a single query in L2 cache does not
> sound like a reasonable use of L2 cache.

Hello.

No one will probably read the whole Event database at once with the
product, but it was a read-speed test, so we needed some big chunk data
to see problems ... You can see on the other post I made the L2C does
not even caches the only one User I have in my test db.

Regards,

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr


ilya.kasnacheev ilya.kasnacheev
Reply | Threaded
Open this post in threaded view
|

Re: L2-cache slow/not working as intended

Hello!

Why Hibernate won't use it for reads of that user, I don't know, it's outside of scope of Ignite.

Putting 1,000,000 records in 5 minutes sounds reasonable, especially since L2 population is optimized for latency, not throughput (as opposed to e.g. CacheLoader).

Regards,
--
Ilya Kasnacheev


пн, 9 нояб. 2020 г. в 14:30, Bastien Durel <[hidden email]>:
Le lundi 09 novembre 2020 à 14:09 +0300, Ilya Kasnacheev a écrit :
> Hello!
> Putting 1 million entries of a single query in L2 cache does not
> sound like a reasonable use of L2 cache.

Hello.

No one will probably read the whole Event database at once with the
product, but it was a read-speed test, so we needed some big chunk data
to see problems ... You can see on the other post I made the L2C does
not even caches the only one User I have in my test db.

Regards,

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr


Bastien Durel Bastien Durel
Reply | Threaded
Open this post in threaded view
|

Re: L2-cache slow/not working as intended

Le lundi 09 novembre 2020 à 19:11 +0300, Ilya Kasnacheev a écrit :
> Hello!
>
> Why Hibernate won't use it for reads of that user, I don't know, it's
> outside of scope of Ignite.
>
> Putting 1,000,000 records in 5 minutes sounds reasonable, especially
> since L2 population is optimized for latency, not throughput (as
> opposed to e.g. CacheLoader).

Hello,

I'm OK if the L2C make 5 minutes to load (as I said, there will
probably never be such a query in the real application), the real
problem here is that this cache does not persist between Sessions, and
therefore is recreated each time.

It may be a configuration problem, but reading [1], I cannot find why

Regards,

[1] https://ignite.apache.org/docs/latest/extensions-and-integrations/hibernate-l2-cache

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr


ilya.kasnacheev ilya.kasnacheev
Reply | Threaded
Open this post in threaded view
|

Re: L2-cache slow/not working as intended

Hello!

You can make it semi-persistent by changing the internal Ignite node type inside Hibernate to client (property clientMode=true) and starting a few stand-alone nodes (one per each VM?)

This way, its client will just connect to the existing cluster with data already there.

You can also enable Ignite persistence, but I assume that's not what you want.

Regards,
--
Ilya Kasnacheev


пн, 9 нояб. 2020 г. в 20:05, Bastien Durel <[hidden email]>:
Le lundi 09 novembre 2020 à 19:11 +0300, Ilya Kasnacheev a écrit :
> Hello!
>
> Why Hibernate won't use it for reads of that user, I don't know, it's
> outside of scope of Ignite.
>
> Putting 1,000,000 records in 5 minutes sounds reasonable, especially
> since L2 population is optimized for latency, not throughput (as
> opposed to e.g. CacheLoader).

Hello,

I'm OK if the L2C make 5 minutes to load (as I said, there will
probably never be such a query in the real application), the real
problem here is that this cache does not persist between Sessions, and
therefore is recreated each time.

It may be a configuration problem, but reading [1], I cannot find why

Regards,

[1] https://ignite.apache.org/docs/latest/extensions-and-integrations/hibernate-l2-cache

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr


Bastien Durel Bastien Durel
Reply | Threaded
Open this post in threaded view
|

Re: L2-cache slow/not working as intended

Le mardi 10 novembre 2020 à 17:39 +0300, Ilya Kasnacheev a écrit :

> Hello!
>
> You can make it semi-persistent by changing the internal Ignite node
> type inside Hibernate to client (property clientMode=true) and
> starting a few stand-alone nodes (one per each VM?)
>
> This way, its client will just connect to the existing cluster
> with data already there.
>
> You can also enable Ignite persistence, but I assume that's not what
> you want.

Hello.

Ignite is already started in client mode before initializing hibernate,
and connected to a few stand-alone servers.

Regards,

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr


ilya.kasnacheev ilya.kasnacheev
Reply | Threaded
Open this post in threaded view
|

Re: L2-cache slow/not working as intended

Hello!

Then it should survive restart while keeping cache content. I'm not an expert in Hibernate caching but that I would expect.

Regards,
--
Ilya Kasnacheev


чт, 12 нояб. 2020 г. в 12:58, Bastien Durel <[hidden email]>:
Le mardi 10 novembre 2020 à 17:39 +0300, Ilya Kasnacheev a écrit :
> Hello!
>
> You can make it semi-persistent by changing the internal Ignite node
> type inside Hibernate to client (property clientMode=true) and
> starting a few stand-alone nodes (one per each VM?)
>
> This way, its client will just connect to the existing cluster
> with data already there.
>
> You can also enable Ignite persistence, but I assume that's not what
> you want.

Hello.

Ignite is already started in client mode before initializing hibernate,
and connected to a few stand-alone servers.

Regards,

--
Bastien Durel
DATA
Intégration des données de l'entreprise,
Systèmes d'information décisionnels.

[hidden email]
tel : +33 (0) 1 57 19 59 28
fax : +33 (0) 1 57 19 59 73
45 avenue Carnot, 94230 CACHAN France
www.data.fr