以下代码的哪一部分将在服务器端运行

时间:2016-12-24 01:04:23

标签: ignite

我使用以下代码将数据从mysql加载到Ignite缓存中。代码以客户端模式Ignite运行,并将数据加载到Ignite集群中。

我会问:

  1. 代码的哪些部分将在服务器端运行?

  2. 将数据加载到缓存中的工作机制类似于map-reduce,那么,哪些任务被发送到服务器? sql?

  3. 我特别要问:以下代码是在客户端运行还是服务器sdie?

    CacheConfiguration cfg = StudentCacheConfig.cache(“StudentCache”,storeFactory); IgniteCache cache = ignite.getOrCreateCache(cfg);

  4. 以下是将数据加载到缓存中的完整代码

    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();
        }
    }
    

1 个答案:

答案 0 :(得分:1)

您在此处展示的代码将在您的应用程序中执行,没有任何魔法发生。通常它是一个客户端节点,但是在你的情况下,它是以服务器模式启动的(可能是错误的):Ignition.setClientMode(false)

数据加载过程将在每个服务器节点上进行。即每个服务器节点将执行提供的SQL查询以从数据库加载数据。