2016-12-24 2 views
2

で実行されます。コードはクライアントモードIgniteで実行され、Igniteクラスタにデータがロードされます。どの部分は、私は、コードを以下でのIgniteキャッシュへのmysqlからデータをロードしていますサーバ側

私が尋ねる:

  1. コードの一部は、サーバー側で実行されますか?

  2. キャッシュにデータをロードするの作業メカニズムはマップ-減らすので、どのようなタスクがサーバーに送信されているように見えますか? SQLは?

  3. 私はparticularlly尋ねる:クライアント側で次のコード実行やサーバsdieはだろうか?

    CacheConfiguration CFG = StudentCacheConfig.cache( "StudentCache"、storeFactory)。 IgniteCacheキャッシュ= 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(); 
    } 
} 

答えて

1

にデータをロードする完全なコードで、魔法のハプニングはありません。通常、それはクライアントノードですが、あなたのケースではサーバモード(おそらく間違って)で起動しています:Ignition.setClientMode(false)

データロードプロセスは、各サーバー・ノード上で起こります。私。各サーバー・ノードは、DBからデータをロードするために提供されるSQL照会を実行します。

+0

おかげ@Valentinは、はい、私はクライアントモードで実行するためのもの。私は私の質問を更新する。私には、CacheConfigurationとそれに依存するすべてのクラス(Exception KV Pojo of the Cache)(データソース、データ型トランスフォーマーなど)がサーバーノードのクラスパスに存在する必要があります。 – Tom

+0

質問に貼り付けたコードで、storeFactoryの内部クラスを使用しています。私は、LoadStudentIntoCacheをサーバのクラスパスに入れなければならないということに私はつながります。LoadStudentIntoCacheをLoadStudentIntoCacheから独立させるスタンドアロンクラスを作成する必要があります。 – Tom

+0

はい、匿名クラスは分散システムでは悪です:)あなたは正しいファクトリはサーバ側で呼び出され、そのクラスはそこにデプロイされなければなりません。 –

関連する問題