java - Ignite cursor.getAll() 需要很长时间来检索数据

标签 java caching ignite in-memory-database

我在 Java 中使用 Ignite v2。下面是我的点燃节点配置。

    CacheConfiguration<Long, MyClass> cacheCfg = new CacheConfiguration<Long, MyClass>();
    cacheCfg.setName("Test_CacheConfig");
    cacheCfg.setReadThrough(true);
    cacheCfg.setWriteThrough(true);
    cacheCfg.setIndexedTypes(Long.class, MyClass.class, Long.class, MyClass.class); 
// Two  fields of long datatype are indexed in pojo MyClass as @QuerySqlField(index=true) 
    cacheCfg.setCacheMode(CacheMode.PARTITIONED);

使用上面的配置我正在创建 cache 作为,

    IgniteCache<Long, MyClass> cache = ignite.getOrCreateCache(cacheCfg);

我在这个缓存中存储了大量记录大约。 3500万

我在两个字段上查询此缓存field1field2 它们都在 Myclass 中索引。 理想情况下,查询只返回游标中的一条匹配记录。但是当我尝试使用 cusror.getAll().get(0) 从游标中读取记录时,它大约需要 4-5 分钟。在我的场景中,这太昂贵了。下面是我的查询代码

    SqlFieldsQuery sql = new SqlFieldsQuery(
"select *  from MyClass where field1 <= some value and maxIpVal >= some value ");
    //It returns only one record
    QueryCursor<List<?>> cursor = cache.query(sql);
    System.out.println(cursor.getAll().get(0)); // It takes time to fetch data

注意: 我使用 CacheStore 将记录放入 cache。记录总数约为3500万条。我已经按照此处的建议配置了 JVM https://apacheignite.readme.io/docs/jvm-and-system-tuning

最佳答案

您很可能需要包含两个字段的组索引:https://apacheignite.readme.io/docs/indexes#section-group-indexes

查看执行计划以检查使用了哪些索引以及如何执行查询也是一个好主意:https://apacheignite.readme.io/docs/sql-performance-and-debugging#using-explain-statement

关于java - Ignite cursor.getAll() 需要很长时间来检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44279562/

相关文章:

ignite - Gridgain 控制台负载均衡

java - Apache Ignite 2.6.0 - 6 节点集群分区模式下的高延迟

java - 如何使用java从给定的url中获取基本url

使用 <S extends {class}> 的 Java 泛型和不兼容类型

java - 设计 hibernate 实体的解决方案

android - 使用 getCacheDir() 缓存文件

caching - 将从 YAML 文件解析的 PHP 数组存储在 Symfony 的缓存中

java - Gradle 缓存不适用于 GitLab-CI

ignite - Apache Ignite 连续查询缓存事务

java - 为什么 Jenkins 不能运行已编译的 jar 文件