我使用以下代码将数据从mysql加载到Ignite缓存中。代码以客户端模式Ignite运行,并将数据加载到Ignite集群中。
我会问:
代码的哪些部分将在服务器端运行?
将数据加载到缓存中的工作机制类似于map-reduce,那么,哪些任务被发送到服务器? sql?
我特别要问:以下代码是在客户端运行还是服务器sdie?
CacheConfiguration cfg = StudentCacheConfig.cache(“StudentCache”,storeFactory); IgniteCache cache = ignite.getOrCreateCache(cfg);
以下是将数据加载到缓存中的完整代码
public class LoadStudentIntoCache {
public static void main(String[] args) {
Ignition.setClientMode(false);
String configPath = "default-config.xml";
Ignite ignite = Ignition.start(configPath);
CacheJdbcPojoStoreFactory storeFactory = new CacheJdbcPojoStoreFactory<Integer, Student>();
storeFactory.setDialect(new MySQLDialect());
IDataSourceFactory factory = new MySqlDataSourceFactory();
storeFactory.setDataSourceFactory(new Factory<DataSource>() {
public DataSource create() {
try {
DataSource dataSource = factory.createDataSource();
return dataSource;
} catch (Exception e) {
return null;
}
}
});
//
CacheConfiguration<Integer, Student> cfg = StudentCacheConfig.cache("StudentCache", storeFactory);
IgniteCache<Integer, Student> cache = ignite.getOrCreateCache(cfg);
List<String> sqls = new ArrayList<String>();
sqls.add("java.lang.Integer");
sqls.add("select id, name, birthday from db1.student where id < 1000" );
sqls.add("java.lang.Integer");
sqls.add("select id, name, birthday from db1.student where id >= 1000 and id < 1000" );
cache.loadCache(null, , sqls.toArray(new String[0]));
Student s = cache.get(1);
System.out.println(s.getName() + "," + s.getBirthday());
ignite.close();
}
}
答案 0 :(得分:1)
您在此处展示的代码将在您的应用程序中执行,没有任何魔法发生。通常它是一个客户端节点,但是在你的情况下,它是以服务器模式启动的(可能是错误的):Ignition.setClientMode(false)
。
数据加载过程将在每个服务器节点上进行。即每个服务器节点将执行提供的SQL查询以从数据库加载数据。