我正在使用IgniteCache.loadCache
将数据从Oracle加载到带有RDMS和Ignite Integration的Ignite Cache(https://apacheignite-mix.readme.io/v1.7/docs/automatic-persistence)
我的主类将启动客户端模式Ignite,并将数据写入3个节点的Ignite群集。
以下是将使用不同条件
查询同一个表的sql数组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",
}
运行这些sql有两种选择:
第一个选项是自己使用线程池:
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])
}
}
第二个选项是:
cache.loadCache(null, sqlArray)
我会从表现的角度问,哪一个会更快,或者他们的表现不会有显着差异?
答案 0 :(得分:1)
第二种方式看起来正确,因为loadCache
也用于启动LoadCacheCustomQueryWorker
的线程池,并且您在每个查询中保存了几个点燃计算调用。
注意:请注意参数。您的案例中的有效参数列表是:
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"
}
因此,参数计数必须是偶数。第一个参数是密钥类型,第二个参数是 SQL查询。