Hi Andrey, I have similar requirement and I am using cache.putAll method to update existing entries or to insert new ones. I will be updating/inserting close to 3 million entries in one go.
I am using wrte through approach to update/insert/delete the data in oracle tables. I am using cachestores writeAll/ deleteAll method to achieve this. I am doing this in single ignite distributed transaction. Now the question is, 1a) Can I use streamer in ignite transaction? 1b) Can I use ignite jdbc bulk update, insert, delete with ignite distributed transaction? 2) if I use streamer will it invoke cache store writeAll method? I meant does write through approach work with streamer. 3) If I use Jdbc bulk mode for cache update and insert or delete, will it invoke cache store's wrieAll and deleteAll method? Does write through approach work with jdbc bulk update/insert/ delete? 4) Does ignite have any apis on cache only for update purpose? Put/putAll will insert or overwrite. What if I just want to update existing entries ? Thanks, Prasad On Fri, Mar 30, 2018, 11:12 PM Andrey Mashenkov <[email protected]> wrote: > Hi, > > Ignite has 2 JDBC drivers. > 1. Client driver [1] starts client node (has all failover features) and > you have to pass client node config in URL. > 2. Thin Driver [2] that connect directly to one of Ignite server node. > > So, you need a first one to be able to use streaming mode. > > [1] https://apacheignite-sql.readme.io/docs/jdbc-client-driver > [2] https://apacheignite-sql.readme.io/docs/jdbc-driver > > On Fri, Mar 30, 2018 at 1:16 PM, <[email protected]> wrote: > >> Hi Andrey, >> >> >> >> I am trying to run [2], as: >> >> // Register JDBC driver. >> >> Class.forName("org.apache.ignite.IgniteJdbcDriver"); >> >> // Opening connection in the streaming mode. >> >> Connection conn = >> DriverManager.getConnection("jdbc:ignite:cfg://streaming=true >> @file:///etc/config/ignite-jdbc.xml"); >> >> >> >> However, I'm a bit confused about that setting in [2] about the >> ignite-jdbc.xml. >> >> >> >> I do not know how to find or create the xml, and here I run the ignite >> node via JVM. >> >> >> >> If I can write java code to produce the ignite-jdbc or not? Or only >> complete Spring XML configuration? >> >> >> >> By the way, I have tried the [1], that worked well. >> >> >> >> Finally, I still need to use the SQL as a client node, and quick write >> data into cache. >> >> >> >> Thank you for helping me >> >> >> >> Rick >> >> >> >> >> >> *From:* Andrey Mashenkov [mailto:[email protected]] >> *Sent:* Thursday, March 29, 2018 6:20 PM >> *To:* [email protected] >> *Subject:* Re: How to insert multiple rows/data into Cache once >> >> >> >> Hi, >> >> >> >> Try to use DataStreamer for fast cache load [1]. >> >> If you need to use SQL, you can try to use bulk mode updated via JDBC [2] >> >> >> >> >> >> Also a COPY SQL command [3] will be available in next 2.5 release. >> >> The feature is already in master, you can try to build from it. See >> example [4] >> >> . >> >> >> >> [1] https://apacheignite.readme.io/docs/data-streamers >> >> [2] >> https://apacheignite.readme.io/v2.0/docs/jdbc-driver#section-streaming-mode >> >> [3] https://issues.apache.org/jira/browse/IGNITE-6917 >> >> [4] >> https://github.com/apache/ignite/blob/master/examples/src/main/java/org/apache/ignite/examples/sql/SqlJdbcCopyExample.java >> >> >> >> On Thu, Mar 29, 2018 at 11:30 AM, <[email protected]> wrote: >> >> Dear all, >> >> >> >> I am trying to use the SqlFieldsQuery sdk to insert data to one cache on >> Ignite. >> >> >> >> I can insert one data into one cache at a time. >> >> >> >> However, I have no idea to insert multiple rows/data into the cache once. >> >> >> >> For example, I would like to insert 1000 rows/data into the cache once. >> >> >> >> Here, I provide my code to everyone to reproduce my situation. >> >> *public* *class* IgniteCreateServer { >> >> *public* *class* Person { >> >> @QuerySqlField >> >> *private* String firstName; >> >> @QuerySqlField >> >> *private* String lastName; >> >> *public* Person(String firstName, String lastName) { >> >> *this*.firstName = firstName; >> >> *this*.lastName = lastName; >> >> } >> >> } >> >> *public* *static* *void* main(String[] args) { >> >> cacheConf.setName("igniteCache"); >> >> *cacheConf**.setIndexedTypes(String.**class**, String.**class**)*; >> >> cacheConf.setCacheMode(CacheMode.*REPLICATED*); >> >> cacheConf.setAtomicityMode(CacheAtomicityMode.*ATOMIC*); >> >> cfg.setCacheConfiguration(cacheConf); >> >> Ignite igniteNode = Ignition.*getOrStart*(cfg); >> >> *IgniteCache* cacheKeyvalue = *igniteNode**.getOrCreateCache(* >> *cacheConf**)*; >> >> >> >> *long* starttime, endtime; >> >> starttime = System.*currentTimeMillis*(); >> >> *int* datasize = 100000; >> >> *for* (*int* i = 0; i < datasize; i++) { >> >> cacheKeyvalue.put("key " + Integer.*toString*(i), Integer.*toString*( >> i)); >> >> } >> >> endtime = System.*currentTimeMillis*(); >> >> System.*out*.println("write " + datasize + " pairkeyvalue data: spend " >> + (endtime - starttime) + "milliseconds"); >> >> >> //================================================================================================================= >> >> >> >> cacheCfg.setName("personCache"); >> >> cacheCfg.setIndexedTypes(String.*class*, Person.*class*); >> >> cacheCfg.setCacheMode(CacheMode.*REPLICATED*); >> >> cacheCfg.setAtomicityMode(CacheAtomicityMode.*ATOMIC*); >> >> *IgniteCache* cacheKeyTable = igniteNode.getOrCreateCache(cacheCfg); >> >> >> >> *long* starttime1, endtime1; >> >> starttime1 = System.*currentTimeMillis*(); >> >> *for* (*int* i = 0; i < datasize; i++) { >> >> cacheKeyTable.query(*new* SqlFieldsQuery("INSERT INTO >> Person(_key,firstName,lastName) VALUES(?,?,?)") >> >> .setArgs(i, "key " + Integer.*toString*(i), Integer.*toString*(i))); >> >> } >> >> endtime1 = System.*currentTimeMillis*(); >> >> System.*out*.println("write" + datasize + " table data: spend " + ( >> endtime1 - starttime1) + "milliseconds"); >> >> } >> >> >> >> The my code show as: >> >> “write 100000 pairkeyvalue data: spend 4734 milliseconds >> >> write 100000 table data: spend 2846 milliseconds” >> >> >> >> From the above result, I feel that using the SQL to insert data to cache >> is faster than using cache.getall(). >> >> >> >> I am not sure if this is correct or not? >> >> >> >> In addition, that is important for me to insert data into cache via the >> use of SQL, >> >> so I would like to insert multiple rows/data to accelerate it. >> >> >> >> if any further information is needed, I am glad to be informed and will >> provide to you as soon as possible. >> >> >> >> Thanks >> >> >> >> Rick >> >> >> >> >> >> >> >> >> >> >> >> >> >> -- >> 本信件可能包含工研院機密資訊,非指定之收件者,請勿使用或揭露本信件內容,並請銷毀此信件。 This email may contain >> confidential information. Please do not use or disclose it in any way and >> delete it if you are not the intended recipient. >> >> >> >> >> >> -- >> >> Best regards, >> Andrey V. Mashenkov >> >> >> -- >> 本信件可能包含工研院機密資訊,非指定之收件者,請勿使用或揭露本信件內容,並請銷毀此信件。 This email may contain >> confidential information. Please do not use or disclose it in any way and >> delete it if you are not the intended recipient. >> > > > > -- > Best regards, > Andrey V. Mashenkov >
