JSONファイルからデータを読み取り、それをIgnite分散キャッシュにプッシュするために以下のコードを記述しました。このコードは正常に機能しますが、「ContainerAgg」クラスを作成する要件は私にとって問題です。私たちのデータ構造は事前定義されていません。抽出はユーザーの選択に基づいて動的に生成されます。
BinaryObjectを使用してみましたが、BinaryObjectを使用するとSQLクエリを実行できません。BinaryObjectを使用し、スキーマにプリコンパイルされたJavaクラスを使用しないサンプルはありますか。
この「StreamVisitorExample」がありますが、これはプリコンパイルされたJavaクラス(Instrument.class)を使用します
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
if (!ExamplesUtils.hasServerNodes(ignite))
return;
CacheConfiguration<String, ContainerAgg> config = new CacheConfiguration<>(MASSIVE_CACHE);
config.setIndexedTypes(String.class, ContainerAgg.class);
ignite.getOrCreateCache(config);
try (BufferedReader br = new BufferedReader(new FileReader(args[0]))) {
IgniteCache<String, ContainerAgg> cache = Ignition.ignite().cache(MASSIVE_CACHE);
String line = null;
Long cnt = 0L;
while ((line = br.readLine()) != null) {
ContainerAgg inst = mapper.readValue(line, ContainerAgg.class);
cache.put(cnt.toString(), inst);
cnt++;
}
long startTime = System.currentTimeMillis();
String sql =
"SELECT SFID, LABEL, PARTID, PROVIDERID, SUM(TOTALCNT) "
+ "FROM CONTAINERAGG GROUP BY SFID, LABEL, PARTID, PROVIDERID";
QueryCursor<List<?>> cursor = cache.query(new SqlFieldsQuery(sql));
long endTime = System.currentTimeMillis();
for (List<?> row : cursor.getAll()){
System.out.println(row);
}
System.out.println("Total Time: " + (endTime - startTime));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
私が何をしたかについて、より多くのコンテキストを提供しますBinaryObject
。JSONをに変換し、map
各エントリをに追加してインスタンスをBinaryObjectBuilder
作成しBinaryObject
、に保存しましたIgniteCache<String, BinaryObject>
BinaryObject
行く方法です。SQLクエリを実行するには、を介してインデックス付きフィールドを構成する必要がありますCacheConfiguration.QueryEntities
(https://apacheignite.readme.io/docs/indexes#queryentity-based-configurationを参照)。
ただし、クエリエンティティを構成できるのはキャッシュに対して1回だけです。したがって、スキーマが変更された場合はdestroy
、キャッシュを作成し、QueryEntity
構成を更新して新しいスキーマを作成する必要があります。
このユースケースのJavaの例はありません。ただし、C#の例を見ることができます。APIは非常に似ています:https://github.com/apache/ignite/blob/master/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/BinaryModeExample。 cs
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加