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

Ignite cursor.getAll() takes very long time to retrieve data

我在 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);

我在这个 cache 中存储了大量记录。 3500万.

我在两个字段上查询 cachefield1field2 它们都在 Myclass 中索引。 理想情况下,查询 returns 游标中只有一条匹配记录。 但是当我尝试使用 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