gpt4 book ai didi

ignite - Apache Ignite 在分布式缓存中存储 JSON Map

转载 作者:行者123 更新时间:2023-12-01 15:01:28 30 4
gpt4 key购买 nike

我编写了下面的代码来从 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)。

但是,您只能为缓存配置一次查询实体。因此,当您的架构发生变化时,您必须销毁缓存并使用更新的QueryEntity配置创建一个新缓存。

此用例没有 Java 示例。但是,您可以查看 C# 示例,API 非常相似: https://github.com/apache/ignite/blob/master/modules/platforms/dotnet/examples/Apache.Ignite.Examples/Datagrid/BinaryModeExample.cs

关于ignite - Apache Ignite 在分布式缓存中存储 JSON Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42940878/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com