Search code examples
ignite

Performance comparison between the different use of IgniteCache.loadCache


I am using IgniteCache.loadCache to load data from Oracle into Ignite Cache with RDMS and Ignite Integration(https://apacheignite-mix.readme.io/v1.7/docs/automatic-persistence)

My main class will start client mode Ignite and will write the data to the Ignite cluster of 3 nodes.

The following is the sql array that will query the same table with different condition

String[] sqlArray = new String[]{
 "select * from PERSON where id >=0 and id < 10000",
  "select * from PERSON where id >=10000 and id < 20000",
  ..
 "select * from PERSON where id >=10000000 and id < 10010000",

}

There are two options to run these sqls:

  1. The first option is using the thread pool myself:

    for (int i = 0; i< sqlArray.length; i++) { //submit the load through thread pool ThreadPool.submit(new Runnable() { cache.loadCache(null, Integer.class.getName(), sqlArray[i]) } }

  2. The second option is:

    cache.loadCache(null, sqlArray)

I would ask from the performance's view, which one will be faster or they will not have significant difference in performance?


Solution

  • The second way looks right because the loadCache is used thread pool for launch LoadCacheCustomQueryWorker too and you save several ignite compute calls on each query.

    NB: Please pay your attention to the arguments. The valid argument list in your case is:

    Object[] args = new Object[] {
        Integer.class.getName(),
        "select * from PERSON where id >=0 and id < 10000",
        Integer.class.getName(),
        "select * from PERSON where id >=10000 and id < 20000",
        Integer.class.getName(),
        "select * from PERSON where id >=10000000 and id < 10010000"
    }
    

    So, the arguments count must be even. The first argument is key type, the second is SQL query.