Apache Ignite扫描查询

这段内容讲的是 Apache Ignite 中的 Scan Query(扫描查询) 的使用方式,以下是对内容的详细中文解释:


一、Scan Query 概述

IgniteCache 提供了多种查询方法,其中 ScanQuery 是一种简单的分布式查询方式,可以用来遍历缓存中的所有条目(key-value)。如果不加过滤条件,它会返回整个缓存的数据。


二、Query 和 QueryCursor

  • Query:代表一个分页查询任务,可以通过 Query.setPageSize(...) 设置每页返回的条目数,默认是 1024。
  • QueryCursor:代表查询结果集,它支持分页遍历。当你遍历到最后一页时,它会自动在后台请求下一页数据。
    • 如果不需要分页,可以直接调用 QueryCursor.getAll() 方法一次性获取所有结果。

三、关闭游标(Closing Cursors)

  • 调用 getAll() 时,QueryCursor 会自动关闭。
  • 如果是使用 for 循环或者显式获取 Iterator 来遍历结果,必须手动关闭游标,推荐使用 try-with-resources 语句块来确保资源释放。

四、执行 Scan Query

1. 无过滤条件的 Scan Query
java 复制代码
IgniteCache<Integer, Person> cache = ignite.getOrCreateCache("myCache");
QueryCursor<Cache.Entry<Integer, Person>> cursor = cache.query(new ScanQuery<>());

这段代码会从缓存中取出所有条目。

2. 带过滤条件的 Scan Query

你可以传入一个谓词(IgniteBiPredicate)来过滤数据。这个谓词会在远程节点上执行。

java 复制代码
IgniteBiPredicate<Integer, Person> filter = (key, p) -> p.getSalary() > 1000;

try (QueryCursor<Cache.Entry<Integer, Person>> qryCursor = cache.query(new ScanQuery<>(filter))) {
    qryCursor.forEach(entry -> System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()));
}

这段代码会找出工资大于 1000 的 Person 对象。

3. 使用 Transformer(转换器)

ScanQuery 还支持一个可选的转换器(Transformer),可以在服务端将数据转换后再返回,减少网络传输。

java 复制代码
List<Integer> keys = cache.query(new ScanQuery<>(
        (k, p) -> p.getSalary() > 1000),
        (entry) -> entry.getKey()).getAll();

这个例子中,只返回符合条件的 key,不传输 value,节省网络流量。


五、本地 Scan Query(Local Scan Query)

默认情况下,Scan Query 是在所有节点上执行的(分布式查询),但你可以设置 .setLocal(true),让查询只在本地节点执行。

java 复制代码
QueryCursor<Cache.Entry<Integer, Person>> cursor = cache
        .query(new ScanQuery<Integer, Person>().setLocal(true));
  • 适用于只关心本地节点缓存数据的场景。
  • 例如:每个节点只处理自己的本地数据,不跨节点查询。

总结

功能 描述
ScanQuery 分布式扫描缓存中的数据
Predicate 在远程节点上过滤数据
Transformer 在远程节点上转换数据再返回,减少网络传输
QueryCursor 支持分页遍历,需要正确关闭
setLocal(true) 只在本地节点执行查询

如果你在使用 Ignite 缓存,并需要遍历数据或做简单的过滤,ScanQuery 是一种简单高效的选择。对于更复杂的查询,可以使用 SQL Query。

相关推荐
网络豆7 小时前
Apache Maven 鸿蒙 PC 适配全记录:把 JVM 构建工具交付到 HiShell
maven·apache·harmonyos
网络豆10 小时前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos
网络豆10 小时前
Apache HBase 鸿蒙 PC 适配全记录:用 Qt 原生客户端打通 REST 管理与数据读写
apache·hbase·harmonyos
无巧不成书02181 天前
Apache Tomcat 9 下载全指南(Windows,Linux,macOS):版本选型、国内镜像、SHA-512 与 PGP 完整性校验
windows·tomcat·apache
Dream-Y.ocean1 天前
鸿蒙平台 Apache Tomcat 管理控制台适配实战:基于 Electron 壳方案的真实 HTTP 服务器实现
tomcat·apache·harmonyos
betazhou1 天前
Apache seatunel常用配置参数解析说明
apache·seatunnel
凤山老林2 天前
Spring Boot 集成 Apache Kafka Streams 构建流处理应用:状态存储、窗口聚合与
spring boot·kafka·apache
DolphinScheduler社区3 天前
Apache DolphinScheduler 8 月报:权限安全加固,调度补火上线,性能与稳定性持续提升
大数据·安全·开源·apache·任务调度·海豚调度
sbjdhjd3 天前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache
Jackyzhe4 天前
Apache Iceberg Variant 类型:v3 半结构化数据不再「二选一」
apache